C#WinForm自定义网格布局

时间:2016-01-23 15:36:01

标签: c# winforms gridview custom-controls

我需要创建一个具有自定义布局的对象列表,如下所示: Custom grid layout

请你告诉我在winform c#应用程序中实现它吗? 请注意,数据不能直接从数据库绑定,而应填写代码。

由于

2 个答案:

答案 0 :(得分:2)

您可以使用以下控件来实现您的目标:

  • FlowLayoutPanel
  • Panel
  • TextBox
  • PictureBox
  • Button

使用FlowLayoutPanel自动排列控件。

我建议创建一个Windows窗体用户控件来制作输入表单,然后将其添加到FlowLayoutPanel

在用户控件中,您可以使用Panel将以下控件放在其中:

  • TextBox代表'RTL标签','LTR标签','数字','文字标签'。
  • PictureBox代表'图片'。
  • 按钮
  • Button

    这是关于如何创建Windows窗体用户控件的link

答案 1 :(得分:1)

Wael的回答确实向您展示了推荐的方式:创建UserControl并将其添加到FlowLayoutPanelTableLayoutPanel

关于UserControls的一件事确实需要注意:您添加到其中的所有控件都是私有,即使将UC添加到{{{},也无法轻松访问1}}在设计师..

所以你应该将他们的修饰符更改为Form或(推荐)创建一组很好的接口例程,最好使用public或方法来填充内容..

这是一个小例子,向您展示如何做到这一点:

enter image description here

正如您所看到的,我只添加了两个Properties,一个Labels,一个TextBox和一个PictureBox

以下是访问例程的代码;我写过它来展示几种变化..

它使用了一些属性,一个完整,一个只读,一个自动。也是一个加载例程,重载,最后一个代表负责Button点击..:

Button

请注意,委托类型是在类之外定义的,所以我们仍然可以直接从其他地方看到它。

另请注意,自动属性实际上是暴露整个public partial class InfoBox : UserControl { public InfoBox() { InitializeComponent(); TextBox1 = textBox1; // hook up the automatic property } public string Label1Text // two-way, fully hooked-up { get { return label1.Text; } set { label1.Text = value; } } public string Label2Text { get { return label2.Text; } } // read-only public TextBox TextBox1 { get; set; } // automatic public void LoadImage(Image img) { pictureBox1.Image = img; if (img != null) label2.Text = img.Width + "x" + img.Height; else label2.Text = "no image loaded."; } public void LoadImage(string imageFileName) { LoadImage(Image.FromFile(imageFileName)); } private void button1_Click(object sender, EventArgs e) { if (Button1Click != null) Button1Click(this); } public Button1Click Button1Click { private get; set; } } public delegate void Button1Click(InfoBox ibox); ,而不只是与其TextBox属性相关联!再说一遍:这是展示各种可能性的意思..

以下是如何将一个此类信息框加载到Text并设置其内容和FlowLayoutPanel操作的示例:

Button