0

FMP という Windows フォーム アプリケーションを作成しています。Form1 というクラス、Panels というクラスがあります。次に、継承を使用して、異なるプロパティを持つ異なるパネルを作成します。

これを行う理由は、教師が Form クラスのすべてのパネルを初期化することを望んでいないためです。

しかし、これを行う方法がわかりません。ここで@Stackoverflowでいくつかのものを見つけましたが、それらも私を助けることができませんでした。

サイズ、位置、色はすべてのパネルで同じです。(ボタンをクリックすると、別のパネルが表示されます ;) ) ただし、名前、パネル上のコントロール、および BackgroundImages は異なります。コントロールは、ここで最も重要な側面です。

質問は:

幅と高さは、フォームの幅と高さに等しくなければなりません。C# のプログラミングで最も優れているのはどれですか? Form1 の Panels から Width と Height を設定するには (ただし、私はそれらを保護しました)、Panels クラスでフォームを宣言して Form1.Width を使用するには?

私が知っているコード:

フォーム1

    public Form1()
    {
        InitializeComponent();
        buttonsProperties();
        panelsProperties();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        panelsChanged(1);
    }

    private void button2_Click(object sender, EventArgs e)
    {
        panelsChanged(2);
    }
    private void panelsChanged(int panelNr)
    {
        if (panelNr == 1)
        {
            panel1.Visible = true;
            panel1.Enabled = true;
            panel2.Visible = false;
            panel2.Enabled = false;
        }
        else if (panelNr == 2)
        {
            panel1.Visible = false;
            panel1.Enabled = false;
            panel2.Visible = true;
            panel2.Enabled = true;
        }
}

パネル

class Panels
{
    Form1 f = new Form1();
    //Color Property
    protected Color color { get; set; }
    //Size
    protected Int32 Width { get; set; }
    protected Int32 Height{ get; set; }
    //Location
    protected Point Location { get; set; }
    public Panels()
    {
        initMembers();
    }

    private void initMembers()
    {
        this.Width = f.Width;
        this.Height = f.Height;
        this.Location = new Point(0, 0);
    }
}
public class Panel1 : Panels
{
    //Nothing yet.
}
4

1 に答える 1

0

Panels各パネルの基本クラスとして名前を使用すると、混乱を招きます。

  • クラスの各インスタンスは明らかに 1 つの「パネル」に似ているため、名前を複数形にすることはできません (パネルには幅があり、複数のパネルには幅がありません)。
  • WinForms アプリケーションを作成しているため、名前がSystem.Windows.Forms.Panelクラスに似すぎています。

私があなただったら、あなたの基本クラスを次から派生させますSystem.Windows.Forms.Panel

abstract class MyPanelBase : Panel
{
    public MyPanelBase()
    {
        Dock = DockStyle.Fill;
    }
}

class MyPanel1 : MyPanelBase
{
}

このようにして、の動作(およびプロパティ)を自動的に取得し、Panelそれを親コントロール(この場合はフォーム)に追加できます。

必要なすべての機能が既にサポートされている場合は、少しPanelスキップしてから直接派生させることもできます。MyPanelBaseMyPanel1Panel

于 2013-11-07T12:35:01.040 に答える