如何在运行时在 C# 中更改用户控件的控件属性?
How to change the properties of controls of a usercontrol at runtime in C#?
我是C#新手。
我的应用程序包含主窗体和一些用户控件。
当我启动 运行 应用程序时,我希望名为 "uc_MainMenu" 的用户控件显示在主窗体内名为 "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 中更改每个按钮的启用属性,但如果是这样,我将不得不在每次切换用户控件时再次更改它们。这就是为什么我在设计用户控件时将启用的 属性 保留为 true 的原因。
试试这个:
foreach (Control ctrl in obj_uc_MainMenu.Controls)
{
if (ctrl.GetType() == typeof(Button) && ((Button)ctrl).Name != "btLogin")
{
((Button)ctrl).Enabled = false;
}
}
请注意,我将 panel2 更改为 obj_uc_MainMenu。
创建一个 属性 内部用户控件:
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 内,则您无法通过 panels.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;
}
}
Find 会找到面板。如果存在,则遍历类型按钮的用户控件并修改 button/s 属性。无需在 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;
}
}
我是C#新手。
我的应用程序包含主窗体和一些用户控件。 当我启动 运行 应用程序时,我希望名为 "uc_MainMenu" 的用户控件显示在主窗体内名为 "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 中更改每个按钮的启用属性,但如果是这样,我将不得不在每次切换用户控件时再次更改它们。这就是为什么我在设计用户控件时将启用的 属性 保留为 true 的原因。
试试这个:
foreach (Control ctrl in obj_uc_MainMenu.Controls)
{
if (ctrl.GetType() == typeof(Button) && ((Button)ctrl).Name != "btLogin")
{
((Button)ctrl).Enabled = false;
}
}
请注意,我将 panel2 更改为 obj_uc_MainMenu。
创建一个 属性 内部用户控件:
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 内,则您无法通过 panels.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;
}
}
Find 会找到面板。如果存在,则遍历类型按钮的用户控件并修改 button/s 属性。无需在 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;
}
}