表格没有显示任何内容

时间:2013-03-03 20:30:34

标签: c# winforms dialog

我是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();

5 个答案:

答案 0 :(得分:2)

一个注意事项 - WPF使用的是Windows,而不是表单,因此我不清楚为什么要从Form而不是Window派生。但我会回答,好像你在谈论WPF窗口作为你的“形式”。

首先,需要显示一些窗口。目前,提供的代码不显示Window,它会尝试显示ListBox

其次,您需要将LayoutPanel添加到窗口并将ListBox添加为布局面板的子项。布局面板有多种风格,例如GridsStackPanels以及Canvases,具体取决于您需要的布局类型。

或者,您可以将Content的{​​{1}}设置为Window。这意味着ListBox上的唯一内容就是您的Window窗口`,您需要使用布局面板。

第二种方法看起来像

ListBox', so if you want multiple visual elements on your

对于第一种方法,我建议您阅读WPF中的布局面板。 Here is one tutorialhere是布局上的MSDN主题。谷歌搜索将产生更多的结果。

答案 1 :(得分:1)

您需要将列表框添加到控件集合中:

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

  this.Controls.Add(s);
}

这将为你控制你的表格,虽然你可能想要设置一些其他属性(例如,让它看起来你想要的) - 正如其他人提到的,你可以看到设计师如何通过将列表框放在表单上并检查生成的代码,在后面的代码中执行此操作。

答案 2 :(得分: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);
            }
        }
    }

答案 3 :(得分: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.

}

}

希望它会有所帮助

答案 4 :(得分:0)

请查看您是否在默认构造中注释掉了InitializeComponent()。它通常初始化FormLoad上表单的所有控件。