winforms 在C# WinForm中按名称返回按钮对象

wkftcu5l  于 2022-11-17  发布在  C#
关注(0)|答案(1)|浏览(223)

我正在用C#开发一个应用程序,它可以处理多个窗体,我希望实现一个方法来设置这些窗体的属性。对于每个窗体,都通过设计器创建了两个名为“okBtn”和“cancelBtn”的按钮。我希望将窗体的AcceptButton属性设置为“okBtn”,将窗体的CancelButton属性设置为“cancelBtn”。但我不知道如何按名称返回buttons对象。下面是一个示例,说明我尝试做的事情:

static public void SetDialogAppearance(Form form)
{
    form.FormBorderStyle = FormBorderStyle.FixedDialog;            
    form.Icon = PresentationLayer.Properties.Resources.embraer;
    form.MinimizeBox = false;
    form.MaximizeBox = false;
    form.AcceptButton = form.Controls["okBtn"]; //this returns an error
    form.CancelButton = form.Controls["cancelBtn"]; //this returns an error
}
uklbhaso

uklbhaso1#

我设法解决这个问题这样做:

  • 我创建了一个继承Form类的类,并将按钮声明为公共字段:
public class OkCancelForm : Form
    {
        public IButtonControl AcceptBtn { get; set; }
        public IButtonControl CancelBtn { get; set; }
    }
  • 在表单中,此类被继承,而在构造函数中,表单按钮被分配给字段:
public partial class MyForm : OkCancelForm
    {
        public MyForm()
        {
            InitializeComponent();
            AcceptBtn = this.okBtn;
            CancelBtn = this.cancelBtn;            
        }
  • 最后,我在SetDialogAppearance类中使用了这些字段:
static public void SetDialogAppearance(OkCancelForm form)
        {
            form.FormBorderStyle = FormBorderStyle.FixedDialog;            
            form.Icon = PresentationLayer.Properties.Resources.embraer;
            form.MinimizeBox = false;
            form.MaximizeBox = false;
            form.AcceptButton = form.AcceptBtn;
            form.CancelButton = form.CancelBtn;
            form.KeyPreview = true;            
        }

我不知道这是否是最好的解决方案(也不是最优雅的),但它确实有效。如果有人有更好的建议,我真的很感激知道。

相关问题