簡體   English   中英

具有不同類型的C#WinForm?

[英]C# WinForm with different Types?

我有一個封裝所有功能的表單,但是可以與具體的Type T1一起使用 現在,我要創建具有不同之處的相同表單,它將使用另一個Type T2

T1和T2不繼承任何東西 ,所以我不能使用繼承。

我如何才能做到一次又一次不復制整個代碼?

我當時正在考慮創建通用表單,但是我認為這不是正確的解決方案。

有任何想法嗎?

編寫T2,復制所有代碼,並確保將所有差異封裝在單獨的方法中。 然后創建一個新的基類,並從兩者中移出通用代碼。 在擁有兩個需要共享代碼的類之后,而不是事先進行計划,代碼共享設計就變得更加明顯(包括是否應使用泛型)。

您如何處理表格中的T1和T2? 如果要以強類型顯示/接受值,則泛型聽起來似乎是正確的方法-盡管使用WinForms設計器IIRC可能會比較棘手。

換句話說,如果您不使用WinForms,可以使用泛型嗎?

我使用一個通用元素來封裝我的對象,它具有一個文本值和一個標記值,它允許您嘗試執行的操作,一種很好的用途是添加到組合框。 也許您可以將這樣的內容合並到您的表單中?

public class GenericElement<T> {
    public GenericElement(string text) {
        this.Text = text;
    }
    public GenericElement(string text, T tag) : this(text) {
        this.Tag = tag;
    }
    public T Tag {
        get; set;
    }
    public string Text {
        get; set;
    }
    public override string ToString() {
        return Text;
    }
}

// Combo-Box example
public class MyForm : Form {
    private void DoLoad(object sender, EventArgs e) {
        comboNum.Items.Add(new GenericElement<int>("One", 1);
        comboNum.Items.Add(new GenericElement<int>("Two", 2);
        comboNum.Items.Add(new GenericElement<int>("Three", 3);
    }
    public int SelectedNumber {
        get {
            GenericElement<int> el =
                comboNum.SelectedItem as GenericElement<int>;
            return el == null ? 0 : el.Tag;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM