答案 0 :(得分:2)
您可以使用以下控件来实现您的目标:
FlowLayoutPanel
Panel
TextBox
PictureBox
Button
使用FlowLayoutPanel
自动排列控件。
我建议创建一个Windows窗体用户控件来制作输入表单,然后将其添加到FlowLayoutPanel
。
在用户控件中,您可以使用Panel
将以下控件放在其中:
TextBox
代表'RTL标签','LTR标签','数字','文字标签'。PictureBox
代表'图片'。 Button
。
这是关于如何创建Windows窗体用户控件的link 。
答案 1 :(得分:1)
Wael的回答确实向您展示了推荐的方式:创建UserControl
并将其添加到FlowLayoutPanel
或TableLayoutPanel
。
关于UserControls
的一件事确实需要注意:您添加到其中的所有控件都是私有,即使将UC添加到{{{},也无法轻松访问1}}在设计师..
所以你应该将他们的修饰符更改为Form
或(推荐)创建一组很好的接口例程,最好使用public
或方法来填充内容..
这是一个小例子,向您展示如何做到这一点:
正如您所看到的,我只添加了两个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