0

私はWinformsとC#を初めて使用するので、これはばかげた質問のように聞こえるかもしれません。モーダルダイアログとして表示されるフォームを作成するためのクラスを以下に示します。

class FrmDelivery : Form
{
    ListBox s;
    public FrmDelivery()
    {
        s = new ListBox();

        s.DataSource = new List<int>(){1,2,3,4};
        s.Update();
        s.Show();

    }

} 

ただし、ShowDialogこのフォームを表示するメソッドを使用すると、何も表示されないという理由があります。このフォームにリストボックスを追加するにはどうすればよいですか?

編集:

コードを使用してフォームを表示します。

       FrmDelivery frm = new FrmDelivery();
        frm.ShowDialog();
4

5 に答える 5

2

注-WPFはフォームではなくWindowsを使用しているため、なぜではなくフォームから派生しているのかわかりませんWindow。ただし、「フォーム」としてWPFウィンドウについて話しているかのように答えます。

まず、何かがウィンドウを表示する必要があります。現在、提供されているコードはウィンドウを表示せず、を表示しようとしListBoxます。

次に、ウィンドウにLayoutPanelを追加しListBox、レイアウトパネルの子としてを追加する必要があります。レイアウトパネルには、必要なレイアウトのタイプに基づいて、など、さまざまなGrids種類があります。StackPanelsCanvases

または、のを自分Contentのに設定できWindowますListBox。これは、ウィンドウだけがウィンドウであることを意味しWindowますListBox', so if you want multiple visual elements on your。レイアウトパネルを使用する必要があります。

2番目のアプローチは次のようになります

this.Content = s;

最初のアプローチについては、WPFのレイアウトパネルを読むことをお勧めします。 これが1つのチュートリアルで、これがレイアウトに関するMSDNトピックです。グーグル検索はより多くの結果をもたらします。

于 2013-03-03T20:40:52.490 に答える
1

コントロールコレクションにリストボックスを追加する必要があります。

ListBox s;
public FrmDelivery()
{
  s = new ListBox();
  s.DataSource = new List<int>() { 1, 2, 3, 4 };

  this.Controls.Add(s);
}

これにより、フォームを制御できるようになりますが、設定する可能性のある他のプロパティがたくさんあります(たとえば、希望どおりに表示するため)。他の人が述べているように、デザイナーがこれをどのように行うかを確認できます。リストボックスをフォームに配置し、結果のコードを調べることにより、コードビハインド。

于 2013-03-03T20:50:27.613 に答える
1

[追加]|[新しいアイテム]|[Windowsフォーム]を使用して新しいフォームを作成することをお勧めします。次に、リストボックスを追加できるデザインサーフェスと、フォームとリストボックスを正しく初期化するコードを生成します。特に、フォームとリストボックスには、現在はないデフォルトのサイズが適用されます。

コード(たとえばForm1.cs)は次のようになります。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        this.listBox1.DataSource = new List<int> { 1, 2, 3, 4 };
    }

    public int? SelectedValue
    {
        get
        {
            return (int?)this.listBox1.SelectedValue;
        }
    }
}

さらに、Form1.Designer.csには次のようなコードがたくさんあります。

....

    #region Windows Form Designer generated code

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
        this.listBox1 = new System.Windows.Forms.ListBox();
        this.SuspendLayout();
        // 
        // listBox1
        // 
        this.listBox1.FormattingEnabled = true;
        this.listBox1.Location = new System.Drawing.Point(30, 37);
        this.listBox1.Name = "listBox1";
        this.listBox1.Size = new System.Drawing.Size(120, 95);
        this.listBox1.TabIndex = 0;
        // 
        // Form1
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(284, 261);
        this.Controls.Add(this.listBox1);
        this.Name = "Form1";
        this.Text = "Form1";
        this.ResumeLayout(false);

    }

    #endregion

そして、あなたはこのようにあなたのフォームを使うことができます:

    private void button1_Click(object sender, System.EventArgs e)
    {
        using (var form = new Form1()) // you should dispose forms used as dialogs
        {
            if (DialogResult.OK == form.ShowDialog()) // optional (you could have OK/Cancel buttons etc
            {
                Debug.WriteLine(form.SelectedValue ?? -1);
            }
        }
    }
于 2013-03-03T20:54:26.837 に答える
1

コレクションにコントロールを追加するだけでなく、彼の特徴を設定する必要があります。少なくともサイズと定置。

class FrmDelivery : Form
{
ListBox s;
public FrmDelivery()
{
    s = new ListBox();
    s.Location = new System.Drawing.Point(0, 0); //relative to the parent control (not an absolute value, so)
    s.Name = "listBox1";
    s.Size = new System.Drawing.Size(120, 95);


    s.DataSource = new List<int>(){1,2,3,4};
    this.Controls.Add(s); //it will add it to the form but you can add it to another control, like panel.

}

}

それが役立つことを願っています

于 2013-03-03T20:59:09.180 に答える
0

デフォルトの構成にInitializeComponent()がコメントアウトされているかどうかを確認してください。通常、FormLoadのフォームのすべての制御を初期化します。

于 2016-02-17T20:44:32.060 に答える