表单没有显示任何东西

本文关键字:任何东 显示 表单 | 更新日期: 2023-09-27 18:01:54

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

表单没有显示任何东西

一个注意- WPF使用Windows,而不是窗体,所以我不清楚为什么你是从窗体而不是Window派生的。但我会回答,好像你是在谈论一个WPF窗口作为你的"窗体"。

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

第二,您需要向窗口添加一个LayoutPanel,并将ListBox添加为布局面板的子面板。布局面板有多种风格,如GridsStackPanelsCanvases,这取决于你想要的布局类型。

也可以将WindowContent设置为您的ListBox。这将意味着Window上唯一的东西是你的ListBox', so if you want multiple visual elements on your窗口,你需要使用一个布局面板。

第二种方法看起来像

this.Content = s;

对于第一种方法,我建议阅读WPF中的布局面板。这是一个教程,这是关于布局的MSDN主题。用google搜索会得到更多的结果

我建议您使用Add| new Item|Windows form创建一个新表单。然后,您将获得一个设计图面,您可以在其中添加一个列表框,并生成将正确初始化表单和列表框的代码。特别是你的表单和列表框将获得默认大小,他们目前没有。

你的代码(比如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;
        }
    }
}
在form . 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);
            }
        }
    }

您不仅应该将控件添加到集合中,还应该设置其特征。大小,至少是炮位。

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.
}

}

希望对大家有所帮助

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

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

这将为您获得控件到您的表单,虽然有一堆其他的属性,你可能会想要设置(例如,让它看起来像你想要的)-正如其他人已经提到的,你可以看到设计者是如何做到这一点在后面的代码中,把一个列表框到表单和检查结果的代码。

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