如何获取当前控件的名称以动态分配控制文本?

时间:2010-07-30 01:27:51

标签: c# controls dynamic

没有详细说明我想要实现的目标,是否有可能(如果是这样)我可以引用一个我不知道名字的对象? 例如,我想说:

someButton.Text = someButton.Name;

但是在右侧我不想陈述对象名称。所以我真正喜欢的是:

someButton.Text = currentButton.Name;
otherButton.Text = currentButton.Name;

基本上我想在运行时根据一堆其他东西动态分配控制文本。希望如果我能做到这一点,我可以将决策制定在一个方法中并重复使用。

更新:(我正在使用Windows窗体。) 我希望有一些方法可以让程序知道我在谈论什么控件(当前的控件)有点像this引用。所以我不必继续传递特定的对象,如果我要这样做,我可能只是传递字符串。我希望每次我想要粘贴调用该方法的相同代码行。我怀疑我只是在偷懒...而我想做的事情是荒谬的。

并且控件没有相关的事件。

我认为答案可能是自定义控件。 (不仅仅是按钮,各种GUI控件)。这将比我的替代方案付出更多的努力。

2 个答案:

答案 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();
}