我是C#的新手。
我的应用程序包含主窗体和一些用户控件。 当我开始运行应用程序时,我希望名为“ uc_MainMenu”的用户控件显示在Main窗体内名为“ panel2”的面板中。
e.g. last number was 1000, next will be 1001 (not random numbers)
有效。
uc_MainMenu包含一些按钮:btnHeadmaster,btnTeacher,btnStudent,btnAttendance,btnExam和btnLogin。 每个按钮的单击都会带来相应的预定义用户控件。
这是我的问题。 我想在加载表格时禁用除btnLogin之外的所有其他按钮。 我该怎么办?
我尝试过这种方法,但是没有用。
->autoIncrement()
我可以在uc_MainMenu中更改每个按钮的启用属性,但是如果是这样,每当切换用户控件时,我都必须再次更改它们。这就是为什么在设计用户控件时将其enabled属性保留为true的原因。
答案 0 :(得分:1)
尝试一下:
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。
答案 1 :(得分:0)
在用户控件内创建一个属性:
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;
}
答案 2 :(得分:0)
如果按钮位于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;
}
}
答案 3 :(得分:0)
查找将找到面板。如果存在,则遍历用户控件的类型按钮并修改按钮的属性。无需在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;
}
}