Activating/Deactivating 个来自配置文件 C# (WinForms) 的按钮
Activating/Deactivating buttons from config file C# (WinForms)
假设我的程序最多有 8 个按钮,我应该能够根据配置文件中的设置切换它们 on/off (visible/hidden)。
然后,我选择的按钮应该在两行(如果超过 4 个)或一行(cnt <= 4)中可见,在它们之间没有间隙。(我的意思是当 1,2,3,4 处于活动状态时,它们将是在第一行中,相同的 1、2、5、8 处于活动状态,因此 5 将取代按钮 3,而 8 将排在第四位)
<add key="butactive" value="1;3;4;8"/>
<add key="but1" value="START"/>
<add key="but2" value="END"/>
<add key="but3" value="PAUSE"/>
<add key="but4" value="RESET"/>
...
程序应该能够根据 "butactive" 键确定哪些按钮可见,然后更改它们的文本 属性 并添加同样从配置文件中获取的特定操作。
private void Form2_Load(object sender, EventArgs e)
{
radButton1.Text = ConfigurationManager.AppSettings["but1"];
radButton2.Text = ConfigurationManager.AppSettings["but2"];
radButton3.Text = ConfigurationManager.AppSettings["but3"];
radButton4.Text = ConfigurationManager.AppSettings["but4"];
...
radButton1.Click += getAction(ConfigurationManager.AppSettings["but1a"]);
radButton2.Click += getAction(ConfigurationManager.AppSettings["but2a"]);
...
}
知道如何在加载表单时 select 需要的按钮并将它们放置在所需位置吗?
你那里的那段代码不好,你正在使用硬编码字符串创建配置名称的依赖关系,这根本不是一个好习惯,如果你可以访问 Properties.Default 我建议你往那边走
对于按钮的位置,您可以随意调整位置,例如,您可以在 windows 形式中像这样切换按钮 3 和 5 的位置:
radButton5.Position = radButton3.Position
但是这不是一个好方法,我的建议是减少按钮编号的依赖性,例如,您可以创建隐藏所有按钮并始终显示第一个按钮按钮,方法 "getAction" 将对该方法有很大帮助,并且实现该行为并不难。
你应该做的 Scratch(伪代码)应该是这样的:
// Get the active buttons from configuration (eg var will be a list of the active buttons names)
var activeButtons = getActiveButtons();
var textBoxNumber = 0
foreach(var button in activeButtons)
{
textBoxNumber++;
TextBox tbx = this.Controls.Find("radButton" + textBoxNumber.ToString(), true).FirstOrDefault() as TextBox;
if(tbx != null)
tbx.Text = ConfigurationManager.AppSettings[button];
}
您可以使用 FlowLayoutPanel 作为按钮的容器。如果你的大小正确,你需要做的就是设置按钮的可见性,它们会根据你的需要自行排列:
radButton1.Visible = (bool)ConfigurationManager.AppSettings["butactive1"];
radButton2.Visible = (boll)ConfigurationManager.AppSettings["butactive2"];
...
至于动作,您可以对所有按钮使用相同的事件处理程序,并根据按下的按钮和您定义的动作执行您需要的任何操作:
radButton1.Click += buttonClickHandler;
radButton2.Click += buttonClickHandler;
private void buttonClickHandler(object sender, EventArgs e)
{
var button = sender as Button;
var action = getAction(ConfigurationManager.AppSettings[button.Text + "a"];
//Execute whatever you want here based on action
}
假设我的程序最多有 8 个按钮,我应该能够根据配置文件中的设置切换它们 on/off (visible/hidden)。 然后,我选择的按钮应该在两行(如果超过 4 个)或一行(cnt <= 4)中可见,在它们之间没有间隙。(我的意思是当 1,2,3,4 处于活动状态时,它们将是在第一行中,相同的 1、2、5、8 处于活动状态,因此 5 将取代按钮 3,而 8 将排在第四位)
<add key="butactive" value="1;3;4;8"/>
<add key="but1" value="START"/>
<add key="but2" value="END"/>
<add key="but3" value="PAUSE"/>
<add key="but4" value="RESET"/>
...
程序应该能够根据 "butactive" 键确定哪些按钮可见,然后更改它们的文本 属性 并添加同样从配置文件中获取的特定操作。
private void Form2_Load(object sender, EventArgs e)
{
radButton1.Text = ConfigurationManager.AppSettings["but1"];
radButton2.Text = ConfigurationManager.AppSettings["but2"];
radButton3.Text = ConfigurationManager.AppSettings["but3"];
radButton4.Text = ConfigurationManager.AppSettings["but4"];
...
radButton1.Click += getAction(ConfigurationManager.AppSettings["but1a"]);
radButton2.Click += getAction(ConfigurationManager.AppSettings["but2a"]);
...
}
知道如何在加载表单时 select 需要的按钮并将它们放置在所需位置吗?
你那里的那段代码不好,你正在使用硬编码字符串创建配置名称的依赖关系,这根本不是一个好习惯,如果你可以访问 Properties.Default 我建议你往那边走
对于按钮的位置,您可以随意调整位置,例如,您可以在 windows 形式中像这样切换按钮 3 和 5 的位置:
radButton5.Position = radButton3.Position
但是这不是一个好方法,我的建议是减少按钮编号的依赖性,例如,您可以创建隐藏所有按钮并始终显示第一个按钮按钮,方法 "getAction" 将对该方法有很大帮助,并且实现该行为并不难。
你应该做的 Scratch(伪代码)应该是这样的:
// Get the active buttons from configuration (eg var will be a list of the active buttons names)
var activeButtons = getActiveButtons();
var textBoxNumber = 0
foreach(var button in activeButtons)
{
textBoxNumber++;
TextBox tbx = this.Controls.Find("radButton" + textBoxNumber.ToString(), true).FirstOrDefault() as TextBox;
if(tbx != null)
tbx.Text = ConfigurationManager.AppSettings[button];
}
您可以使用 FlowLayoutPanel 作为按钮的容器。如果你的大小正确,你需要做的就是设置按钮的可见性,它们会根据你的需要自行排列:
radButton1.Visible = (bool)ConfigurationManager.AppSettings["butactive1"];
radButton2.Visible = (boll)ConfigurationManager.AppSettings["butactive2"];
...
至于动作,您可以对所有按钮使用相同的事件处理程序,并根据按下的按钮和您定义的动作执行您需要的任何操作:
radButton1.Click += buttonClickHandler;
radButton2.Click += buttonClickHandler;
private void buttonClickHandler(object sender, EventArgs e)
{
var button = sender as Button;
var action = getAction(ConfigurationManager.AppSettings[button.Text + "a"];
//Execute whatever you want here based on action
}