首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中传递SplitPanel上的值并为每个值添加一个新的标签/文本框

在C#中传递SplitPanel上的值并为每个值添加一个新的标签/文本框
EN

Stack Overflow用户
提问于 2013-07-16 23:44:37
回答 3查看 246关注 0票数 0

C#和我在不久的将来不会成为最好的朋友,但我正在努力做到最好:我想做的是,我想从一些图表中获得一些具有相关值的属性,然后将其写入到一些windows窗体中。我想大概有一个SplitPanel。在左边,我想为每个属性添加一个标签,在右边,为值添加一个文本框。通常我猜标签也能做到这一点,但在第二步,我想让oppurtunity通过将新值写入文本框来更改这些值。但那是很久以后的事了,首先我想把值放到面板里。获取值没有问题,但下一步会给我带来很大的问题。此外,我还有两个按钮,一个用于从图表中获取值,另一个用于最终提交更改。submitButton目前并没有太大的意义。

我猜一个代码会告诉1000多个单词,所以到目前为止我做了以下工作:

代码语言:javascript
复制
string Attributes;
string Values;
string tag;
tag = "";
Attributes = "";
Values = "";

foreach (EA.Element theElement in myPackage.Elements)
{
  foreach (EA.Attribute theAttribute in theElement.Attributes)
    {
      Attributes = theAttribute.Name.ToString();
      Values = theAttribute.Default.ToString();
      tag = tag + Attributes + Values + Environment.NewLine;
    }

  /*TextWriter writer = new StreamWriter(myPackage.Name.ToString() + ".txt");
  writer.WriteLine(tag.ToString());
  writer.Close();*/
  }

我使用纹理写入器的部分只是为了检查输出是否为right...it。

现在是表单的代码隐藏部分:

代码语言:javascript
复制
public partial class ValueChanger : Form
{
    public ValueChanger()
    {
        InitializeComponent();
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new ValueChanger());   
    }
    public void splitContainer1_Panel1_Paint(object sender,System.Windows.Forms.PaintEventArgs  e)
    {
       Label Alabel = new Label();
       Alabel.Text = Attributes.ToString();
    }

    public void splitContainer1_Panel2_Paint(object sender, PaintEventArgs e)
    {
        TextBox Box = new TextBox();
        Box.Text = Values.ToString();
    }

    /*private void SubmitButton_Click(object sender, EventArgs e)
    {

    }*/

    private void GetButton_Click(object sender, EventArgs e)
    {

    }

对于GetButton,我尝试了不同的选择,但没有取得任何进展。只是无法访问属性和值。这是我第一次用C#处理windows窗体。总的来说,我对C#还是个新手。我的问题可能是微不足道的,但它让我整个下午都在冒汗。我不期望一个完整的答案与代码和一切。关于提示和提示,我会很高兴的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-17 00:20:33

您的问题实际上很简单,每个容器(如Panel)都有一个名为Controls的属性,要将控件显示为容器的子控件,必须将该控件添加到容器中。以下是您可能需要的代码的简化版本:

代码语言:javascript
复制
private void AddEntry(string attribute, string value){
   Label lbl = new Label {Text=attribute, Dock=DockStyle.Top};
   lbl.Parent = splitContainer1.Panel1;//This is the same to splitContainer1.Panel1.Controls.Add(lbl);
   lbl.BringToFront();

   TextBox txt = new TextBox {Text=value, Dock=DockStyle.Top};
   txt.Parent = splitContainer1.Panel2;
   txt.BringToFront();
   lbl.Height = txt.Height;
}
//I guess you want to add new entry to your splitContainer in this foreach
foreach (EA.Element theElement in myPackage.Elements)
{
  foreach (EA.Attribute theAttribute in theElement.Attributes)
  {
     Attributes = theAttribute.Name.ToString();
     Values = theAttribute.Default.ToString();
     //call the method above
     AddEntry(Attributes, Values);
     tag = tag + Attributes + Values + Environment.NewLine;
  }
}
票数 1
EN

Stack Overflow用户

发布于 2013-07-17 00:02:54

不是一个明确的答案,但我还没有足够的声誉来评论澄清。

我认为您的结构是错误的,您应该在GetButton_Click事件中使用两个循环来遍历从源代码获取的值,然后将成对的标签/文本框放入您的SPlitContainer中。

paint事件可以在任何情况下触发,所以除了格式化之外,不应该做任何其他事情。

如果你是Winforms的新手,你不会知道DataGridView,对于这个场景,你应该学习:)

票数 0
EN

Stack Overflow用户

发布于 2013-07-18 23:26:53

我正在为企业架构师编写一个插件,下面的代码是主类的一部分:

代码语言:javascript
复制
 case "&Change Values":


 string attribute;
 string value;
 attribute = "";
 value = "";

 ChangeValues c = new ChangeValues();

 foreach (EA.Element theElement in myPackage.Elements)
 {
 foreach (EA.Attribute theAttribute in theElement.Attributes)
   {
   attribute = theAttribute.Name.ToString();
   value = theAttribute.Default.ToString();
   c.AddEntry(attribute, value);
   } 
 }

 break;

这是winform的代码:

代码语言:javascript
复制
public ChangeValues()
    {
        InitializeComponent();
        //dataGridView1.Dock = DockStyle.Fill;
        ChangeValues.ActiveForm.Activate();
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new ChangeValues());
        Application.SetCompatibleTextRenderingDefault(false);

    }

public void AddEntry(string attribute, string value)
    {
        Label lbl = new Label { Text = attribute, Dock = DockStyle.Top };
        lbl.Parent = splitContainer1.Panel1;//This is the same to splitContainer1.Panel1.Controls.Add(lbl);
        lbl.BringToFront();

        TextBox txt = new TextBox { Text = value, Dock = DockStyle.Top };
        txt.Parent = splitContainer1.Panel2;
        txt.BringToFront();
        lbl.Height = txt.Height;
    }

private void ChangeValues_Load(object sender, EventArgs e)
    {
    }

当我尝试启动外接程序时,我得到一个NullReferenceException。我找了一个多小时,但没有找到这个异常的原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17681121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档