【问题标题】:Making a Form as a reusable Control like FolderBrowser将表单制作为可重用的控件,如 FolderBrowser
【发布时间】:2016-10-17 00:43:37
【问题描述】:

我创建了一个模拟FolderBrowseDialog 的表单,但添加了一些我想要的功能。它已经过测试并且可以工作,所以现在我想把它变成一个控件。 我的问题是,一旦我从UserControl 而不是Form 继承,我就不再有Close() 方法,也不再有FormClosing 事件。 当我单击确定或取消按钮时,如何关闭表单并将控制权返回给调用对象?

【问题讨论】:

    标签: c# winforms user-controls custom-controls


    【解决方案1】:

    要使其成为可重用组件,而不是尝试从Control 派生它,而是创建一个使用该表单的Component。通过这种方式,它可以显示在工具箱中,并且您可以像其他组件一样将组件的实例放在设计图面上。

    您的组件应该包含一些您想从对话框中公开的属性,还包含一个ShowDialog 方法,该方法使用一些属性(如标题、初始目录)创建您的表单,并将您的自定义表单显示为对话框并设置一些属性(如所选文件夹)并返回对话框结果。例如:

    using System.ComponentModel;
    using System.Windows.Forms;
    public partial class MyFolderBrowser : Component
    {
        public string Text { get; set; }
        public string SelectcedFolder { get; set; }
        public DialogResult ShowDialog()
        {
            using (var f = new YourCustomForm() { Text = this.Text })
            {
                var result = f.ShowDialog();
                if (result == DialogResult.OK)
                    SelectcedFolder = f.SelectedFolder;
                return result;
            }
        }
    }
    

    【讨论】:

    • 谢谢,这行得通。但是,我确实找到了替代解决方案。我创建了一个类库,然后用我的表单类替换了创建的令牌 class.cs,然后只是更改了命名空间。它有效,但我更喜欢你的解决方案。它更干净一些。
    • 如果你不制作一个组件,你就不能在设计时使用它,你应该只在代码中使用它。但是制作一个组件可以让你将它的一个实例放到你的表单上,就像一个真正的文件夹浏览器组件、一个计时器等等。
    猜你喜欢
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 2015-11-28
    • 2016-03-17
    • 1970-01-01
    • 2020-10-03
    • 2016-03-24
    • 1970-01-01
    相关资源
    最近更新 更多