如何在 WinForms 运行时设置多个按钮文本?
Posted
技术标签:
【中文标题】如何在 WinForms 运行时设置多个按钮文本?【英文标题】:How to set the many button text at runtime in WinForms? 【发布时间】:2012-02-18 10:29:05 【问题描述】:我正在使用 Winform。我已经设置了 20 个按钮和上下按钮,如下所示。 这些按钮的文本值为 button1 = 1;按钮 2 = 2; ... button20 =20 在开始时间。我已经这样做了。
当我按下向下按钮时,20 个按钮的文本已更改为 21 到 40;和向上按钮返回 1 到 20。
btn_Down click event
button21.Text = "21";
button22.Text = "22";
...
..
button40.Text = "40";
and btn_Up Click event
btn_Down click event
button1.Text = "1";
button2.Text = "2";
...
..
button20.Text = "20";
有什么简单的编码方法吗?
更新-
当我尝试 sll 代码时,。
int index = 0;
foreach (var control in this.tableLayoutPanel1.Controls)
var button = control as Button;
if (button != null)
button.Text = String.Format("0", index);
index++;
我得到了下面。上下也变了,数字顺序倒了。
请更新答案。
【问题讨论】:
你想实现什么,因为我无法理解“但是当我按下向下按钮时,20 个按钮的文本已更改为 21 到 40;向上按钮返回 1 到 20。 " 我想要 For(i=1;iusing System.Linq; form.Controls.OfType<Button>().ForEach(b => b.Text = "...");
【参考方案1】:
如果按钮按 1 到 20 的顺序排列,则不需要从按钮名称中提取数字,只需使用自增索引变量即可:
int index = 0;
// either form.Controls or this.Controls dedepnds on where you put this code
foreach (var control in form.Controls)
var button = control as Button;
if (button != null)
button.Text = String.Format("Button #0", index);
index++;
编辑:试试看,因为手头没有环境设置,所以没有检查过
为避免影响向上/向下按钮,请使用特殊标记值标记它,例如 Tag="ControlButton"
using System.Linq;
var buttons = this.tableLayoutPanel1.Controls
.OfType<Button>()
.Where(b => b.Tag != "ControlButton");
int index = buttons.Count();
foreach (var button in buttons)
button.Text = String.Format("Button #0", index);
index--;
【讨论】:
请查看我已注明日期的问题。【参考方案2】:您是否想找到一种简单的方法来设置这 20 个按钮控件的 Text 属性以避免不得不一个一个地设置它们?
在这种情况下,您可以遍历表单的控件并检查它是否是按钮。
例如:
foreach(var control in base.Controls)
if (control is Button)
var button = (Button) control;
button.Text = ExtractNumber(button.Name);
更多关于迭代控件的信息可以在这里找到:
http://www.dotnetperls.com/control
ExtractNumber(...) 方法从按钮的 Name 属性中提取数字。
private string ExtractNumber(string value)
var number = Regex.Match(value, @"\d+").Value;
return number;
【讨论】:
每次如果通过假。所以 ExtractNumber 函数不执行。我如何解决这个问题。 感谢和抱歉,我在 tableLayoutPanel1 中放置了按钮,所以它给出了 False 值。现在我得到了答案。但向上和向下按钮也会受到影响。 您可以将容器控件(例如面板)添加到 tableLayoutPanel 并在其中放置向上/向下按钮。然后它们将在迭代过程中被跳过。【参考方案3】:一种简单的方法是在表单中设置一个 Button 对象数组。数组中的每个元素都是您的按钮之一。 然后您可以稍后使用简单的 for 循环遍历按钮。
类似这样的:
for(int i=0; i<buttons.Length; i++)
buttons[i].Text = (i+1).ToString();
但是你想做什么?您的问题可能有更有效的解决方案。
【讨论】:
什么是按钮是指 System.Windows.Forms.button 没有长度属性。并且通过错误错误 1 当前上下文中不存在名称“按钮”。我如何解决这个问题? 代码只是一个示例。您必须定义一个长度正确的数组(我建议您将其命名为“按钮”)。您还必须使用对表单中按钮的引用来填充它。您可以在 Form_Load 事件中执行此操作。【参考方案4】:也许这可以帮助你:C# create an array of controls
您可以创建一个按钮数组并分配按钮文本,例如:
int i = start_value //e.g. 0 or 20 or 40...
foreach (button b in buttons)
b.Text = i.ToString();
i++;
【讨论】:
以上是关于如何在 WinForms 运行时设置多个按钮文本?的主要内容,如果未能解决你的问题,请参考以下文章
RichTextBox C# 设置插入符号位置 winforms
带有按钮、组合框和文本框的 C# WinForms (.NET Framework) DataGridView:使用按钮添加新行以添加组合框项时出错
Winforms:运行 oledb 连接时出错(可安装的 Isam,未为命令对象设置 Commandtext)