質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

1回答

2278閲覧

フォームから受け取った値をユーザーコントロールに表示させるにはどうしたらよいでしょうか

Omuraisu235

総合スコア11

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2019/06/06 08:19

編集2019/06/06 09:22

イメージ説明

前提・実現したいこと

現在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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k.matsuda

2019/06/06 08:40

画像を表示させるには、コードのマークダウン「```」の外に記載してくださいね。 yoteibiのメソッドは実行されているんですよね?
Omuraisu235

2019/06/06 08:48 編集

>>k.matsuda yoteibiメソッドは実行されていてdateTimePicker1.ValueとtextBox1.Textに値が入ったことを確認しています。 しかし反映されないです。
k.matsuda

2019/06/06 09:01

Refreshはどうでしょう?
Omuraisu235

2019/06/06 09:09

>>k.matsuda 試してみましたがダメでした・・・。 プロパティもいろいろ試しましたが、どれもダメでした。
y_waiwai

2019/06/06 09:16

このyoteibiメソッドはどこからどういうふうに呼び出してるんでしょうか
KoichiSugiyama

2019/06/06 09:23

yoteibi()をどう呼び出しているのでしょうか。そのあたりのコードも開示してもらえると、アドバイスしやすいです。static指定して、ただ一つのユーザコントロールとコメントされていますが、コンストラクタがpublicで宣言されているので、別のインスタンスに値をセットしているからかもしれません。
Omuraisu235

2019/06/06 09:27

>>y_waiwai Form2のソースコードの一部を追記しました。 うまく説明できませんが、Form2が表示されたタイミングで実行されています。 Form2はForm1の日付(ラベル)をクリックすると表示されます。 nitiziメソッドはForm1から値を受け取っています。
KoichiSugiyama

2019/06/06 09:34

あくまで推測なんですが、ユーザコントロールをForm2にツールボックス経由で貼り付けていませんか? もしそうなら、static宣言したインスタンスは使われていないと思います。Form2のメンバとしてUserControl1にアクセスしてみたらどうなりますか?
guest

回答1

0

ベストアンサー

UserControl1.Instance.yoteibi(num1nen,num1tuki,num1hi);

これじゃダメです。

UserControl1のインスタンス名.yoteibi(num1nen,num1tuki,num1hi);
で呼び出してみよう。

ちょっと解説しておきますと、
Instanceを呼び出したら、UserControl1をnewしてますが、現在表示されているUserControl1とは別のインスタンスが生成されるだけです
それにいくら手を加えても表示されません。

ユーザコントロールといえども、ふつーのコントロールと同じです
textBox1.Text = "てすと3";
としてるのと同じように、
フォームに貼り付けているユーザコントロールの名前.メソッド(なんたらかんたら);
としましょう。

#当然、Instanceプロパティ周りは不要なので削除しときましょうね

投稿2019/06/06 09:31

編集2019/06/06 09:43
y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Omuraisu235

2019/06/07 01:02

アドバイスありがとうございます。 どうしてもできなさそうだったので違う方法で試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問