没有详细说明我想要实现的目标,是否有可能(如果是这样)我可以引用一个我不知道名字的对象? 例如,我想说:
someButton.Text = someButton.Name;
但是在右侧我不想陈述对象名称。所以我真正喜欢的是:
someButton.Text = currentButton.Name;
otherButton.Text = currentButton.Name;
基本上我想在运行时根据一堆其他东西动态分配控制文本。希望如果我能做到这一点,我可以将决策制定在一个方法中并重复使用。
更新:(我正在使用Windows窗体。)
我希望有一些方法可以让程序知道我在谈论什么控件(当前的控件)有点像this
引用。所以我不必继续传递特定的对象,如果我要这样做,我可能只是传递字符串。我希望每次我想要粘贴调用该方法的相同代码行。我怀疑我只是在偷懒...而我想做的事情是荒谬的。
并且控件没有相关的事件。
我认为答案可能是自定义控件。 (不仅仅是按钮,各种GUI控件)。这将比我的替代方案付出更多的努力。
答案 0 :(得分:1)
如何确定“当前”按钮?
刚刚点击了吗?使用sender
事件处理程序的Click
参数(并将其强制转换为Button
)。
你的意思是那个有焦点的人吗?阅读ActiveControl
属性(并将其转换为Button
)。
编辑:等待,通过当前按钮,您指的是赋值语句左侧的那个?如果你想对一堆不同的按钮执行某些操作,你绝对可以避免多次命名每个按钮。这是一个例子:
foreach(Button currentButton in new Button[] { thisButton, thatButton, otherButton, yetAnotherButton })
{
currentButton.Text = currentButton.Name;
}
或
Action<Button> copyName = (currentButton) => currentButton.Text = currentButton.Name;
copyName(thisButton);
copyName(thatButton);
copyName(otherButton);
copyName(yetAnotherButton);
答案 1 :(得分:0)
使用反射。
Imports System.Reflection
Public Function GetName(b as Button) as String
Dim t As Type = b.GetType()
Dim prop As PropertyInfo = t.GetProperty("Name")
Return prop.GetValue(b, Nothing).ToString()
End Function
在C#中,我相信它会这样:
using System.Reflection;
public string GetName(Button b)
{
Type t = b.GetType();
PropertyInfo prop = t.GetProperty("Name");
return prop.GetValue(b, null).ToString();
}