窗体不显示任何东西
我是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();
我建议你使用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;
}
}
}
另外会有一个代码负载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);
}
}
}
一注 - WPF使用Windows,而不是形式,所以我不明白为什么你从窗体而不是Window
派生。但我会回答,就像你在谈论一个WPF窗口作为你的“表单”一样。
首先,需要显示窗口。目前,提供的代码不显示窗口,它试图显示一个ListBox
。
其次,您需要添加一个LayoutPanel到窗口并添加您的ListBox
作为布局面板的子项。布局面板有许多不同的风格,例如Grids
和StackPanels
和Canvases
,这取决于您想要的布局类型。
或者,您可以将Window
的Content
设置为您的ListBox
。这意味着Window
上只有您的ListBox', so if you want multiple visual elements on your
窗口,您需要使用布局面板。
第二种方法看起来像
this.Content = s;
对于第一种方法,我建议你在WPF布局面板读了。 Here is one tutorial和here是布局上的MSDN主题。谷歌搜索将产生更多的结果。
您需要将列表框添加到控件集合:
ListBox s;
public FrmDelivery()
{
s = new ListBox();
s.DataSource = new List<int>() { 1, 2, 3, 4 };
this.Controls.Add(s);
}
这将得到控制到您的形式你,虽然有一堆,你可能会希望设置其他属性(如以像其他人所说的那样),您可以看到设计人员如何在代码中执行此操作,方法是将列表框放到表单上并检查生成的代码。
你不应该只控件添加到集合中还设置了他的caracteristics。至少。 大小&进驻。
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.
}
}
希望这将有助于
请看看你是否在注释掉默认构造有在InitializeComponent()。它通常初始化FormLoad上窗体的所有控件。
您正试图显示列表框而不是表单。 – ChrisF 2013-03-03 20:34:45
请参阅我的编辑@ChrisF我认为它对你所说的内容有所了解 – Cemre 2013-03-03 20:38:10
在你的FrmDelivery构造函数中仍然有's.Show();'。这是错误的。您也不会将列表框添加到可视化树中。如果你解释了为什么你不能使用XAML这可能会有所帮助。 – ChrisF 2013-03-03 20:39:30