tx
2025-04-14 c33f54888d8fb4e1961bca69fe3d01e87fc54be6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
// COPYRIGHT (C) Tom. ALL RIGHTS RESERVED.
// THE AntdUI PROJECT IS AN WINFORM LIBRARY LICENSED UNDER THE Apache-2.0 License.
// LICENSED UNDER THE Apache License, VERSION 2.0 (THE "License")
// YOU MAY NOT USE THIS FILE EXCEPT IN COMPLIANCE WITH THE License.
// YOU MAY OBTAIN A COPY OF THE LICENSE AT
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE
// DISTRIBUTED UNDER THE LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
// SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING PERMISSIONS AND
// LIMITATIONS UNDER THE License.
// GITEE: https://gitee.com/antdui/AntdUI
// GITHUB: https://github.com/AntdUI/AntdUI
// CSDN: https://blog.csdn.net/v_132
// QQ: 17379620
 
using System;
using System.Windows.Forms;
 
namespace AntdUI
{
    /// <summary>
    /// Drawer 抽屉
    /// </summary>
    /// <remarks>屏幕边缘滑出的浮层面板。</remarks>
    public static class Drawer
    {
        /// <summary>
        /// Drawer 抽屉
        /// </summary>
        /// <param name="form">所属控件</param>
        /// <param name="content">控件</param>
        /// <param name="Align">方向</param>
        public static Form? open(Form form, Control content, TAlignMini Align = TAlignMini.Right)
        {
            return open(new Config(form, content) { Align = Align });
        }
 
        #region 配置
 
        /// <summary>
        /// Drawer 配置
        /// </summary>
        /// <param name="form">所属控件</param>
        /// <param name="content">控件</param>
        /// <param name="Align">方向</param>
        public static Config config(Form form, Control content, TAlignMini Align = TAlignMini.Right)
        {
            return new Config(form, content) { Align = Align };
        }
 
        #endregion
 
        /// <summary>
        /// Drawer 抽屉
        /// </summary>
        /// <param name="config">配置</param>
        public static Form? open(this Config config)
        {
            if (config.Form.IsHandleCreated)
            {
                if (config.Form.InvokeRequired)
                {
                    Form? form = null;
                    config.Form.Invoke(new Action(() =>
                    {
                        form = open(config);
                    }));
                    return form;
                }
                if (config.Mask)
                {
                    var formMask = new LayeredFormMask(config.Form);
                    formMask.Show(config.Form);
                    var frm = new LayeredFormDrawer(config, formMask);
                    frm.Show(formMask);
                    return frm;
                }
                else
                {
                    var frm = new LayeredFormDrawer(config);
                    frm.Show(config.Form);
                    return frm;
                }
            }
            return null;
        }
 
        /// <summary>
        /// 配置
        /// </summary>
        public class Config
        {
            /// <summary>
            /// Drawer 配置
            /// </summary>
            /// <param name="form">所属控件</param>
            /// <param name="content">控件</param>
            public Config(Form form, Control content)
            {
                Form = form;
                Content = content;
            }
 
            /// <summary>
            /// 所属窗口
            /// </summary>
            public Form Form { get; set; }
 
            /// <summary>
            /// 控件
            /// </summary>
            public Control Content { get; set; }
 
            /// <summary>
            /// 是否展示遮罩
            /// </summary>
            public bool Mask { get; set; } = true;
 
            /// <summary>
            /// 点击蒙层是否允许关闭
            /// </summary>
            public bool MaskClosable { get; set; } = true;
 
            /// <summary>
            /// 边距
            /// </summary>
            public int Padding { get; set; } = 24;
 
            /// <summary>
            /// 方向
            /// </summary>
            public TAlignMini Align { get; set; } = TAlignMini.Right;
 
            /// <summary>
            /// 是否释放
            /// </summary>
            public bool Dispose { get; set; } = true;
 
            /// <summary>
            /// 用户定义数据
            /// </summary>
            public object? Tag { get; set; }
 
            /// <summary>
            /// 加载回调
            /// </summary>
            public Action? OnLoad { get; set; }
 
            /// <summary>
            /// 关闭回调
            /// </summary>
            public Action? OnClose { get; set; }
        }
    }
}