0

C# と私は近い将来親友にはなれませんが、最善を尽くそうとしています :Dいくつかのウィンドウフォームに。私は1つのSplitPanelについて考えました。左側ではすべての属性にラベルを追加し、右側では値としてテキストボックスを追加したいと考えました。通常、ラベルもそれを行うと思いますが、2番目のステップでは、新しい値をテキストボックスに書き込むことで、機会に値を変更してもらいたいと考えています。しかし、それは遠い将来のことです。まず、パネルに値を取得したいと思います。値を取得することは問題ありませんが、次のステップで大きな問題が発生します。さらに、ダイアグラムから値を取得するためのボタンと、最終的に変更を送信するためのボタンの 2 つのボタンがあります。submitButton は現時点では関連性がありません。

![valueChanger.jpg][1]

コードは1000語以上を伝えると思うので、これまでに行ったことは次のとおりです。

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();*/
  }

出力が正しいかどうかを確認するためだけにテキストライターの部分を挿入しました...正しいです。

フォームの分離コード:

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#にかなり慣れていません。私の問題は些細なことかもしれませんが、午後中ずっと汗をかきました。コードとすべてで完全な答えを期待していません。ヒントやヒントについて私はとても幸せです。

4

3 に答える 3

0

決定的な答えではありませんが、明確にするためにコメントするのに十分な評判はまだありません.

あなたの構造が間違っていると思います.GetButton_Clickイベント内にループのペアがあり、ソースから取得した値をループしてから、SPlitContainerにラベル/テキストボックスのペアを配置する必要があります.

ペイント イベントはいつでも発生する可能性があるため、そこで書式設定以外のことを行うべきではありません。

Winforms を初めて使用する場合は、DataGridView について知りません。この正確なシナリオについては、学習する必要があります:)

于 2013-07-16T16:02:54.120 に答える
0

私はエンタープライズ アーキテクト用のアドインを作成しています。以下のコードはメイン クラスの一部です。

 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のコードです:

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 が発生します。1 時間以上検索しましたが、この例外の理由が見つかりませんでした。

于 2013-07-18T15:26:52.780 に答える