一个属性用于多个按钮
本文关键字:用于 属性 按钮 一个 | 更新日期: 2023-09-27 18:21:02
有没有一种方法可以在c#中为多个项编写一个属性。例如,我有5个按钮,我不想写button1.text = "etc"
、button2.text = "etc
,我想写button.text="etc"
,并有button.text到button.text来有"etc"文本。
我想这在类似的情况下是可行的
public void SetButtonText(string value) {
this.Controls.OfType<Button>().ToList().ForEach(b => b.Text = value);
}
或者通过属性相同:
public string ButtonText {
set {
Controls
.OfType<Button>()
.ToList()
.ForEach(b => b.Text = value);
}
}
编辑
经过进一步的研究,我发现在Windows Phone中没有直接访问页面控件的方法。因此,这完全取决于您是否希望退出PhoneApplicationPage:
在我看来,您的解决方案围绕Page.LogicalChildren属性。
public class MyPage : Page {
public string ButtonText {
set {
LogicalChildren
.OfType<Button>()
.ToList()
.ForEach(b => b.Text = value);
}
}
}
由于LogicalChildren
有一个受保护的访问器,您需要通过派生类来访问它,我想这对您在Windows Phone上使用的任何类型的页面都很方便。
或者将网格直接放到PhoneApplicationPage
上,然后将其他控件(如按钮)放到上面,然后您可以通过Grid.Children属性访问它们。
因此,在去掉Grid
并将其命名为myBaseGrid
之后,可以执行以下操作:
public void SetButtonsText(string text) {
myBaseGrid.Children
.OfType<Button>()
.ToList()
.ForEach(b => b.Text = "myText");
}
我个人会采用这样的方法,即在我的样本中,用复数拼写单词Button
,让名字清楚地表明你在做什么。
也许您正在寻找控制数组:http://msdn.microsoft.com/en-us/library/aa289500(v=vs.71).aspx?
不能将所有5个按钮都分配给同一个引用,这样button.text = "etc"
就可以工作了。
但是,您可以将按钮绑定到相同的属性:
<Button Content="{Binding myText}"/>
<Button Content="{Binding myText}"/>
<Button Content="{Binding myText}"/>
<Button Content="{Binding myText}"/>
如果使用INotifyPropertyChanged
正确设置了绑定,则当更新myText
时,所有绑定都将更新。
您也可以将控件放入集合中,并按照其他人的建议对其进行foreach以设置其Content
属性。
一种方法是创建一个方法,为您设置所有这些,您必须手动编写一次:
public void SetAllButtonTexts(string text)
{
button1.text = text;
button2.text = text;
// . . .
}
或者,你可以使用一个循环:
public void SetAllButtonTexts(string btnText)
{
foreach (var control in this.Controls.OfType<Button>())
{
(control).Text = btnText;
}
}
如果你不想更新所有按钮,你可以做一件简单但不那么优雅的事情,那就是用一些自定义文本修改你想更改的按钮的Tag
属性,并且只更新这些:
public void SetAllButtonTexts(string btnText, string tagText = "")
{
foreach (var control in this.Controls.OfType<Button>()
.Where(b => string.IsNullOrEmpty(tagText)
|| (b.Tag != null && b.Tag.Equals(tagText))))
{
(control).Text = btnText;
}
}
简单地说:将所有应该在列表中更改的按钮分组。然后稍后循环浏览此列表并设置所有按钮的文本。
这里有一些代码
首先:
public static List<Button> buttonList = new List<Button>{};
在form_load:上
buttonList.AddRange(new List<Button>{ button1,button2,button3,...}); // Group your buttons
现在它取决于你想更改它的"when"或"where"。如果按钮一开始就应该更改,请将以下代码放入form_load-event中。否则,当它应该在事件上激发时,将其放入事件中。
foreach(Button btn in buttonList)
{
btn.Text = "Change all button-texts from list at one time.";
}
你也可以像这样处理多个标签或盒子等。只需声明正确的数据类型。
问候