繁体   English   中英

如何在C#中的运行时更改用户控件的控件的属性?

[英]How to change the properties of controls of a usercontrol at runtime in C#?

我是C#的新手。

我的应用程序包含主窗体和一些用户控件。 当我开始运行应用程序时,我希望名为“ uc_MainMenu”的用户控件显示在Main窗体内名为“ panel2”的面板中。

uc_MainMenu obj_uc_MainMenu = new uc_MainMenu();

private void frmMain_Load(object sender, EventArgs e)
{
     this.panel2.Controls.Add(obj_uc_MainMenu);
}

有用。

uc_MainMenu包含一些按钮:btnHeadmaster,btnTeacher,btnStudent,btnAttendance,btnExam和btnLogin。 这些按钮的每一个单击都会带来相应的预定义用户控件。

这是我的问题。 我想在加载表格时禁用除btnLogin之外的所有其他按钮。 我怎样才能做到这一点?

我尝试过这种方法,但是没有用。

foreach (Control ctrl in panel2.Controls)
 {
     if (ctrl.GetType() == typeof(Button))
         {
            ((Button)ctrl).Enabled = false;
         }
  }

我可以在uc_MainMenu中更改每个按钮的启用属性,但是如果是这样,无论何时切换用户控件,我都必须再次更改它们。 这就是为什么在设计用户控件时将其enabled属性保留为true的原因。

尝试这个:

foreach (Control ctrl in obj_uc_MainMenu.Controls)
 {
     if (ctrl.GetType() == typeof(Button) && ((Button)ctrl).Name != "btLogin")
         {
            ((Button)ctrl).Enabled = false;
         }
  }

注意,我通过obj_uc_MainMenu更改了panel2。

在用户控件内创建一个属性:

public bool MyButtonEnabled
{
    get
    {
        return anyButtonButNo_btLogin.Enabled;
    }
    set
    {
        foreach (Control ctrl in this.Controls)
        {
            if (ctrl.GetType() == typeof(Button) && ((Button)ctrl).Name != "btLogin")
            {
                ((Button)ctrl).Enabled = value;
            }
        }
    }
}

现在,您可以在用户控件使用的任何位置使用此属性。

uc_MainMenu obj_uc_MainMenu = new uc_MainMenu();

private void frmMain_Load(object sender, EventArgs e)
{
     this.panel2.Controls.Add(obj_uc_MainMenu);

     ///this property will access the button inside that user control
     obj_uc_MainMenu.MyButtonEnabled=false;
}

如果按钮在obj_uc_MainMenu内部,则无法通过panel.Controls检索它。 如果要检索它们,则应使用obj_uc_MainMenu.Controls。

我不知道您是如何定义用户控件obj_uc_MainMenu的,那么我邀请您可以执行以下操作:

     foreach (Control ctrl in obj_uc_MainMenu.Controls)
        {
            if (ctrl.GetType() == typeof(Button))
            {
                ((Button)ctrl).Enabled = false;
            }
        }

查找将找到面板。 如果存在,则遍历用户控件的类型按钮并修改按钮的属性。 不需要在foreach循环中强制转换按钮(我们知道它的类型为Button)。

// Get the panel
var panel2 = Controls.Find("YourPanel", true).FirstOrDefault() as Panel;

// If it exists
if (panel2 != null)
{
    foreach (var button in panel2.obj_uc_MainMenu.Controls.OfType<Button>())
    {
        // Set the value of each one
        button.Enabled = false;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM