1

我怎样才能重构它,这样我就不会在每种方法中重复相同的代码?

    private void setupTooltip(Grid obj)
    {
        var controls = obj.Children.OfType<System.Windows.Controls.TextBox>();
        foreach (var control in controls)
        {
            control.ToolTip = "Code is <" + control.Name + ">";
        }
    }

    private void setupTooltip(StackPanel obj)
    {
        var controls = obj.Children.OfType<System.Windows.Controls.TextBox>();
        foreach (var control in controls)
        {
            control.ToolTip = "Code is <" + control.Name + ">";
        }
    }
4

4 回答 4

3

制作一种接受Panel对象的方法。StackPanel 和 Grid 都从那里继承,并且您不希望使用任何特定于控件的方法。

http://msdn.microsoft.com/en-us/library/system.windows.controls.grid.aspx

http://msdn.microsoft.com/en-us/library/system.windows.controls.stackpanel.aspx

于 2012-11-26T17:29:34.633 回答
3

项在Panel类中定义。

private void setupTooltip(Panel obj)
{
    var controls = obj.Children.OfType<System.Windows.Controls.TextBox>();
    foreach (var control in controls)
    {
        control.ToolTip = "Code is <" + control.Name + ">";
    }
}
于 2012-11-26T17:32:23.947 回答
1

通过使用公共基类作为方法的参数,您可以对和Panel使用以下方法:GridStackPanel

private void setupTooltip(Panel panel)
{
    var controls = panel.Children.OfType<System.Windows.Controls.TextBox>();
    foreach (var control in controls)
    {
        control.ToolTip = "Code is <" + control.Name + ">";
    }
}
于 2012-11-26T17:33:02.250 回答
0

如果StackPanelGrid共享一个公共基类或接口,您可以将方法的参数更改为该类型并删除第二种方法。

于 2012-11-26T17:29:28.627 回答