C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

C# フォーム間の変数受け渡し

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■87911 / inTopicNo.1)  C# フォーム間の変数受け渡し
  
□投稿者/ C#はじめました (1回)-(2018/07/12(Thu) 19:30:39)

分類:[C#] 

C# Windowsフォームアプリケーションで
Form1とForm2の2つのフォーム間で変数の共有化(受け渡し)を行いたいと思っています。

Form1にnumericUpDown1、button1を設けて、
button1を押すとForm2が開きます。

Form2にもnumericUpDown1、button1を設けてあり、
button2を押すとForm2が閉じて、Form2のnumericUpDown1の値が
Form1のnumericUpDown1の値に反映されます。

本当であればForm1のbutton1を押してForm2を開いたとき、
Form1のnumericUpDown1の値をForm2のnumericUpDown1の値に反映させたいのですが
下記のコードでは、それがうまくできません。

Form2のnumericUpDown1の値をForm1のnumeriUpDown1の値に反映はできているのですが、、、

どこがおかしいのか分かる方いたら、どのようにコードを直したらよいか教えて下さい。

宜しくお願い致します。

親フォームForm1.cs↓

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Drawing.Imaging;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();
            form2.ShowDialog();

            this.numericUpDown1.Value = form2.numericUpDown1.Value;
            form2.Dispose();
        }
    }
}

子フォームForm2.cs↓

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form2 : Form
    {
        Form1 form1 = new Form1();

        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            this.numericUpDown1.Value = form1.numericUpDown1.Value;
            Refresh();
        }
    }
}


引用返信 編集キー/
■87912 / inTopicNo.2)  Re[1]: C# フォーム間の変数受け渡し
□投稿者/ みい (82回)-(2018/07/12(Thu) 19:46:13)
No87911 (C#はじめました さん) に返信
子フォームForm2.csの中で
Form1 form1 = new Form1();
として、今表示されているForm1とは別のForm1を「new 」で作っています。
表示中のForm1には結びついていないため、値は反映されません。

Form2のコンストラクタに引数を追加して、Form1でForm2を生成する時に
値を引き渡してはいかがでしょうか。

引用返信 編集キー/
■87913 / inTopicNo.3)  Re[1]: C# フォーム間の変数受け渡し
□投稿者/ 魔界の仮面弁士 (1739回)-(2018/07/12(Thu) 20:06:29)
2018/07/12(Thu) 20:10:01 編集(投稿者)

No87911 (C#はじめました さん) に返信
> 本当であればForm1のbutton1を押してForm2を開いたとき、
> Form1のnumericUpDown1の値をForm2のnumericUpDown1の値に反映させたいのですが

こんな感じでどうでしょう。


//Form1
public partial class Form1
{
  public Form1()
  {
    InitializeComponent();
  }

  private void button1_Click(object sender, EventArgs e)
  {
    using(var dlg = new Form2(this.numericUpDown1.Value))
    {
      if(dlg.ShowDialog(this) == System.Windows.Forms.DialogResult.OK)
      {
        this.numericUpDown1.Value = dlg.DecimalValue;
      }
    }
  }
}


// Form2
public partial class Form2
{
  public Form2(decimal initialValue)
  {
    InitializeComponent();
    this.AcceptButton = this.button1;
    this.button1.DialogResult = System.Windows.Forms.DialogResult.OK;
    this.numericUpDown1.Value = initialValue;
  }

  public decimal DecimalValue
  {
    get { return this.numericUpDown1.Value; }
  }
}
引用返信 編集キー/
■87914 / inTopicNo.4)  Re[1]: C# フォーム間の変数受け渡し
□投稿者/ Jitta (387回)-(2018/07/12(Thu) 21:58:02)
No87911 (C#はじめました さん) に返信

> C# Windowsフォームアプリケーションで
> Form1とForm2の2つのフォーム間で変数の共有化(受け渡し)を行いたいと思っています。

あなたの先人たちです。
https://www.bing.com/search?q=%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0+%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E5%8F%97%E3%81%91%E6%B8%A1%E3%81%97&form=EDNTHT&mkt=ja-jp&httpsmsn=1&refig=401d3276b47348b1d75378f6213e8e35&PC=NMTS&sp=-1&pq=%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0+%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E5%8F%97%E3%81%91%E6%B8%A1%E3%81%97&sc=0-13&qs=n&sk=&cvid=401d3276b47348b1d75378f6213e8e35

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ