前提・実現したいこと
現在C#でカレンダーを作成しています。
最初にForm1(カレンダー画面)が出てきて、日付(ラベル)をクリックするとForm2(予定入力画面)が表示されます。
Form2にはタブコントロールがありその中にユーザーコントロールを表示させています。
ユーザーコントロールにForm1、Form2で使用している値を受け渡し、テキストボックスなどに表示させたい。
発生している問題・エラーメッセージ
受け取った値が表示されない。
該当のソースコード
C#
1namespace Calendar 2{ 3 public partial class UserControl1 : UserControl 4 { 5 public UserControl1() 6 { 7 InitializeComponent(); 8 textBox1.Text = "てすと1"; **//ここは反映される** 9 //this.dateTimePicker1.Value = new DateTime(2000, 12, 24); **//ここは反映される** 10 } 11 12 //ただ一つのフォームのインスタンスを保持するフィールド 13 private static UserControl1 _instance; 14 15 //ただ一つのフォームにアクセスするためのプロパティ 16 public static UserControl1 Instance 17 { 18 get 19 { 20 //_instanceがnullまたは破棄されているときは、 21 //新しくインスタンスを作成する 22 if (_instance == null || _instance.IsDisposed) 23 { 24 _instance = new UserControl1(); 25 } 26 return _instance; 27 } 28 29 } 30 31 public void yoteibi(int num1nen, int num1tuki, int num1hi) //ここの引数はForm2から取得 32 { 33 dateTimePicker1.Value = new DateTime(num1nen, num1tuki, num1hi); **//ここが反映されないので反映させたい** 34 textBox1.Text = "てすと2"; **//ここが反映されないので反映させたい** 35 //dateTimePicker1.Update(); 36 ////dateTimePicker1.ResetText(); 37 //dateTimePicker2.Value = new DateTime(num1nen, num1tuki, num1hi); 38 //dateTimePicker3 = new DateTimePicker(); 39 //dateTimePicker3.Value = new DateTime(num1nen, num1tuki, num1hi, 0, 0, 0, 0); 40 } 41 42 43 44 private void button1_Click(object sender, EventArgs e) 45 { 46 textBox1.Text = "てすと3"; 47 //Form2.Instance.tabControl1.TabPages.Remove(Form2.Instance.tabControl1.SelectedTab); //タブ削除 48 } 49 50Form2からユーザーコントロールに受け渡す部分のソースコード 51public void nitizi(string tuki,string hiniti,string taitoru,string nen) 52 { 53 if (hiniti.Length < 2) 54 { 55 hi = hiniti.Substring(0, 1); 56 hi = hi.Replace("\r", "").Replace("\n", ""); 57 } 58 59 else 60 { 61 hi = hiniti.Substring(0, 2); 62 hi = hi.Replace("\r", "").Replace("\n", ""); 63 } 64 65 num1nen = int.Parse(nen); 66 num1tuki = int.Parse(tuki); 67 num1hi = int.Parse(hi); 68 var theDay = new DateTime(num1nen,num1tuki,num1hi); 69 youbi = theDay.ToString("ddd"); 70 71 72 //label5.Text = nen + "年" + tuki + "月" + hi + "日" + "(" + youbi + ")"; 73 74 UserControl1.Instance.Show(); 75 UserControl1.Instance.yoteibi(num1nen,num1tuki,num1hi); 76 77 //var CurrentControl = tabControl1.SelectedTab.Controls["UserControl1"] as UserControl1; 78 //CurrentControl.dateTimePicker1.Value = new DateTime(num1nen, num1tuki, num1hi); 79 //CurrentControl.dateTimePicker2.Value = new DateTime(num1nen, num1tuki, num1hi); 80 81 82 //this.userControl11.textBox1.Text = taitoru; 83 //Form1.Instance.test(tuki, hiniti); 84 } 85
試したこと
InitializeComponent();の下とボタンクリックイベントに記述すると反映される。
補足情報(FW/ツールのバージョンなど)
VisualStudio 2017
画像を表示させるには、コードのマークダウン「```」の外に記載してくださいね。
yoteibiのメソッドは実行されているんですよね?
>>k.matsuda
yoteibiメソッドは実行されていてdateTimePicker1.ValueとtextBox1.Textに値が入ったことを確認しています。
しかし反映されないです。
Refreshはどうでしょう?
>>k.matsuda
試してみましたがダメでした・・・。
プロパティもいろいろ試しましたが、どれもダメでした。
このyoteibiメソッドはどこからどういうふうに呼び出してるんでしょうか
yoteibi()をどう呼び出しているのでしょうか。そのあたりのコードも開示してもらえると、アドバイスしやすいです。static指定して、ただ一つのユーザコントロールとコメントされていますが、コンストラクタがpublicで宣言されているので、別のインスタンスに値をセットしているからかもしれません。
>>y_waiwai
Form2のソースコードの一部を追記しました。
うまく説明できませんが、Form2が表示されたタイミングで実行されています。
Form2はForm1の日付(ラベル)をクリックすると表示されます。
nitiziメソッドはForm1から値を受け取っています。
あくまで推測なんですが、ユーザコントロールをForm2にツールボックス経由で貼り付けていませんか?
もしそうなら、static宣言したインスタンスは使われていないと思います。Form2のメンバとしてUserControl1にアクセスしてみたらどうなりますか?
回答1件
あなたの回答
tips
プレビュー