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

オブジェクトを受け取るメソッドを 1 つ作成し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

ChildrenPanelクラスで定義されます。

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をメソッドのパラメーターとして使用することで、 と の両方に次のメソッドを使用できGridますStackPanel

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

共通の基本クラスまたはインターフェイス StackPanelを共有している場合は、メソッドのパラメーターをその型に変更し、2 番目のメソッドを削除できます。Grid

于 2012-11-26T17:29:28.627 に答える