【问题标题】:Getting Selected Control获得选定的控制
【发布时间】:2010-12-04 14:45:46
【问题描述】:

我有一个“画布”(它只是一个面板控件),用户可以单击一个按钮将某些控件添加到画布,即标签、链接标签、图像等...然后他们可以编辑这些控件,就像他们可以编辑刚刚添加的标签的文本一样...

但我试图让他们为他们单击的控件选择新字体和新颜色,但它并不总是有效,即使它应该是......

我的代码是:

private string SelectedControl;

当我点击一个控件时:

private void label_Click(object sender, EventArgs e)
{
    Label label = (Label)sender;
    SelectedControl = label.Name;
}

当用户选择字体时:

private void setfont()
{
    foreach(Control control in Canvas.Controls)
    {
        if(control.Name == SelectedControl)
        {
            control.Font = selectedfont;
        }
    }
}

因此,此代码确实有效,但并非一直有效。有谁知道以某种方式跟踪 Last-Clicked 控件的任何其他方式,以便以后可以引用它?

【问题讨论】:

    标签: c# controls selected


    【解决方案1】:

    为什么不存储对最后点击的控件本身的引用,而不是存储字符串名称?

    所以你的代码变成:

    private Control SelectedControl;
    
    private void label_Click(object sender, EventArgs e)
    {
        Control ctrl = sender as Control;
        if(ctrl != null)
            SelectedControl = ctrl;
    }
    
    private void setfont()
    {
        SelectedControl.Font = selectedfont;
    }
    

    存储引用的成本很低,您可以直接访问引用。

    编辑:通过将引用更改为控件,您可以引用许多不同类型的控件,而无需进行类型转换。 我做这段代码的原因:

    Control ctrl = sender as Control;
    if(ctrl != null)
            SelectedControl = ctrl;
    

    这是一种更安全的类型转换。如果发送方由于某种原因没有从 Control 继承,则不会进行类型转换,并且 label 将为 null,但不会引发异常。

    您可以为所有希望通过被选中来更改的控件设置一个单击事件处理程序。如果您在代码中创建控件并手动连接事件,这将更容易。

    您可能想考虑做一些边框或效果来显示已选择的控件。 这可以通过这样做来执行:

    if(ctrl != null)
    {
        Deselect(SelectedControl); //Deselects the old control
        SelectedControl = ctrl;
        Select(SelectedControl); //Selects the new control
    }
    

    在哪里取消选择和选择做一些花哨的效果或边框。

    希望这会有所帮助。

    【讨论】:

    • 我确实有一个问题......因为有许多不同类型的控件......我怎么知道使用你的方式点击了“哪个”?
    • 我不确定你在问什么。如果 label_Click 仅处理 Label 的单击事件,那么将其他类型的控件设置为 SelectedLabel 不会有问题。或者您是否正在寻找一种以某种方式向用户显示点击了哪个标签的方法?
    • 不不,用户将在画布上添加多个控件。像标签,一些链接标签,一个按钮等,当其中一个被点击时,我需要能够更改被点击的特定控件的字体
    • 啊,如果我正确阅读了原版 q 会有所帮助。要进行此更改,请不要将 Label 存储为 SelectedLabel,而是将其更改为 Control,它是所有控件的基类。我已经更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多