2009-07-23 21 views
1

私はC#でWindowsアプリケーションを開発しています。私は小数点以下の3つの変数を使用しました:counternarrow、およびbroadいくつかの計算に基づいて異なる値を格納しています。 別のフォームに変数を渡す

は、ボタンをクリックすると、メッセージボックスが

は今、私はこれらの変数の値を表示する必要があるれる3つのラベルを持つ別のフォームを追加したい。これらの3桁の値と、アプリケーションの終了を示す表示されます。どうしたら、これらの変数を次の形式で個別のラベルに渡すことができますか?

答えて

1

新しいフォームを作成...

public class CalculationResultForm : Form 
{ 
    public CalculationResultForm(){} 

    public decimal Counter 
    { 
     set { labelCounter.Text = value.ToString(); } 
    } 
    public decimal Broad 
    { 
     set { labelBroad.Text = value.ToString(); } 
    } 
    public decimal Narrow 
    { 
     set { labelNarrow.Text = value.ToString(); } 
    } 

    private void OkButton_Click(object sender, EventArgs e) 
    { 
     // This will close the form (same as clicking ok on the message box) 
     DialogResult = DialogResult.OK; 
    } 
} 

次に、既存のフォームボタン内で、をクリックします。 ndler ...

private void MyButton_Click(object sender, EventArgs e) 
{ 
    CalculationResultForm resultForm = new CalculationResultForm(); 
    resultForm.Counter = _counter; 
    resultForm.Narrow = _narrow; 
    resultForm.Broad = _broad; 

    resultForm .ShowDialog(); 

    Application.Exit(); 
} 
+0

なぜ 'Application.Exit'コールですか?そうでなければ私は答えが好きです。フォームが非モーダルで表示され、フォームが表示されたままになり、プロパティを通じて新しい値で更新され続けることが可能になるからです。 –

+0

元の質問は、現時点で起こっていることを暗示しているようです。「ボタンをクリックすると、これら3つの10進値とアプリケーションが終了するメッセージボックスが表示されます」 - 明らかに、必要でない場合は削除できます。 – Oll

+0

thanx a ton!その最高の答えはうまくいきました。代わりに、OKボタンの代わりに、印刷ダイアログボックスを表示する '印刷'ボタンを使用することができます。実際には、ユーザーがスコアカードを直接印刷したいのです...アクションを実行するコマンドが存在する場合は助けてください。 thanx !! – knowledgehunter

0

簡単な方法は、プロパティを使用することです。値を渡すフォームは別のクラスです。

第二の形式にこのようなものを追加します。

public int counter {get; set;} 

は、最初のフォームからあなたが

Form2 form2 = new Form2(); 
form2.counter = 1; 
form2.ShowDialog(); 

またはそれらの線に沿って何かの線に沿って何かをしたいです。

3

第2の形式で新しいコンストラクタを作成する方法があります。 2番目のフォームの値を使用することができます。メインフォームから

public Form2(decimal x, decimal y, decimal z):this() 
{ 
    this.TextBox1.Text = Convert.ToString(x); 
    this.Label1.Text = Convert.ToString(y); 
    etc... 
}; 

Form2 frm2 = new Form2(x,y,z); 
frm2.Show(); 
+0

私はあなたがこれを行うときにデザイナーのサポートを失うと思います。 –

+0

Iveには問題がありませんでした。 – Inisheer

+0

私はこれも多く、デザイナーには問題がありません。おそらく、あなたがデフォルトのコンストラクタを隠してしまうと、問題が発生するかもしれません。 – overslacked

1

最も簡単な方法は、おそらく新しいメソッドを追加することで、それはShowWithDetails呼び出すことができます:

public void ShowWithDetails(double Counter, double Narrow, double Broad) 
    { 
     CounterLabel.Text = Counter.ToString(); 
     NarrowLabel.Text = Narrow.ToString(); 
     BroadLabel.Text = Broad.ToString(); 

     ShowDialog(); 
    } 
関連する問題