2016-01-23 112 views
-1

我需要創建對象的列表,有一個自定義佈局是這樣的: Custom grid layoutC#WinForm的自定義網格佈局

請你告訴我何來實現它在WinForm C#應用程序? 請注意,數據無法直接從數據庫綁定,因此應該填入代碼。

感謝

+0

創建一個用戶控件用填充元素的公共方法,如果你需要它,委託按鈕調用.. – TaW

回答

1

瓦埃勒的答案確實給你的推薦方法:創建一個UserControl和它要麼添加到FlowLayoutPanel或一個TableLayoutPanel

一件事UserControls確實需要一些注意:您添加的所有控制它是私人並不能很容易地訪問,甚至當你添加UC在設計師Form ..

所以你應該改變它們的修飾符爲public或者(推薦)創建一組不錯的接口例程,最好使用Properties或者使用方法來填充內容..

下面是一個小例子,向您展示如何這可以做到:

enter image description here

正如你可以看到我只有兩個Labels有加,一個TextBox,一個PictureBoxButton

這裏是訪問例程的代碼;我已經寫了它來顯示幾個變化..

它使用幾個屬性,一個完整的,一個只讀和一個自動。也裝載常規,超負荷的最後一個委託照顧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行動:

private void Form1_Load(object sender, EventArgs e) 
{ 
    InfoBox aBox = new InfoBox(); 
    aBox.TextBox1.Text = "<Comment>"; 
    aBox.LoadImage("D:\\stop32.png"); // some image file 
    aBox.Button1Click = myButton1Action; 

    flowLayoutPanel1.Controls.Add(aBox); 
} 

void myButton1Action (InfoBox box) 
{ 
    Console.WriteLine(box.Label2Text); 

} 
2

您可以使用以下控件來實現你想要的:

  • FlowLayoutPanel
  • Panel
  • TextBox
  • PictureBox
  • Button

使用FlowLayoutPanel自動排列控件。

我建議創建一個windows窗體用戶控件,使輸入窗體然後將其添加到FlowLayoutPanel

在用戶的控制,你可以使用Panel放置裏面以下控件:

  • TextBox爲「RTL標籤」,「LTR標籤」,「數」,「文字標籤」。
  • PictureBox for'Picture'。
  • Button按鈕。

    這裏是關於如何創建一個Windows窗體用戶控件的link