前提・実現したいこと
Visual STudioで コンボボックス、テキストボックス、ボタン、ラベルをつかい
年、月、日、曜日をテキストボックスに表示するシステムを作っています。
見づらいので以下のように省略します。
テキストボックス = txt コンボボックス = cmb ラベル = lbl ボタン = btn
↓レイアウト↓
[lbl:年] [cmb] [lbl:月] [cmb] [lbl:日] [cmb]
[lbl:yyyy/MM/dd 表示] [txt]
[lbl:yyyy年MM月dd日 表示] [txt]
[lbl曜日] [txt]
[btn:表示] [btn:クリア] [btn:閉じる]
↓下から質問になります↓
[ボタン 表示]を押して [ラベル yyyy/MM/dd 表示] と [ラベル yyyy年MM月dd日 表示] の横のテキストボックスに表示しようと思い、ボタンを押したところでエラー?のような文字がテキストボックスに表示されました。
プログラミングを初めて一か月で、初投稿で見づらい、詳細が足りなかもしれません。すいません。
補足に設計書を書いてみました。
発生している問題・エラーメッセージ
[ラベル yyyy/MM/dd 表示]のテキストボックス↓ System.Windows.Forms.ComboBox+ObjectCollection/System.Windows.Forms.ComboBox+ObjectCollection/System.Windows.Forms.ComboBox+ObjectCollection [ラベル yyyy年MM月dd日 表示]のテキストボックス↓ System.Windows.Forms.ComboBox, Items.Count: 3年System.Windows.Forms.ComboBox, Items.Count: 12月System.Windows.Forms.ComboBox, Items.Count: 30日
該当のソースコード
C#
1private void btnD_Click(object sender, EventArgs e) 2{ 3txtymdO.Text = (cmbY.Items.ToString() + "/" + cmbM.Items.ToString() + "/" + cmbD.Items.ToString()); 4txtymdU.Text = (cmbY.ToString()+ "年" + cmbM.ToString() + "月" + cmbD.ToString() + "日"); 5} 6 7↑.Itemsが上のコードにはあって下のコードにはないのは、いろいろ試していたためです。↑ 8該当のソースコードは張りましたが、これだけではわからないと思うので下にすべて張っておきます。 9 10 11using System; 12using System.Collections.Generic; 13using System.ComponentModel; 14using System.Data; 15using System.Drawing; 16using System.Linq; 17using System.Text; 18using System.Threading.Tasks; 19using System.Windows.Forms; 20 21namespace FinalTest 22{ 23 public partial class FrmTest2 : Form 24 { 25 public FrmTest2() 26 { 27 InitializeComponent(); 28 29 //「年」の選択肢が変わった時に呼び出されるイベントに、「月」の選択肢が変わった時のイベントを追加 30 cmbY.SelectedIndexChanged += new EventHandler(cmbM_SelectedIndexChanged); 31 32 //12回ループさせて、「Add」メソッドで引数の値をコンボボックスに追加 33 for (int i = 1; i < 13; i++) 34 { 35 cmbM.Items.Add(i); 36 } 37 cmbM.SelectedIndex = 0; 38 39 40 // 必要な変数を宣言する 41 DateTime dtNow = DateTime.Now; 42 43 //年の追加 44 cmbY.Items.Add(dtNow.Year - 1); 45 cmbY.Items.Add(dtNow.Year); 46 cmbY.Items.Add(dtNow.Year + 1); 47 48 49 // 初期値 50 cmbY.Text = dtNow.Year.ToString(); 51 cmbM.Text = dtNow.Month.ToString(); 52 cmbD.Text = dtNow.Day.ToString(); 53 54 } 55 56 private void btnClose_Click(object sender, EventArgs e) 57 { 58 this.Close(); 59 } 60 61 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 62 { 63 //cmbY 64 65 //日コンボをクリアする 66 cmbD.Items.Clear(); 67 //月 変更時 日の初期値を1にする 68 cmbD.Text = 1.ToString(); 69 } 70 71 private void cmbD_SelectedIndexChanged(object sender, EventArgs e) 72 { 73 74 } 75 76 private void cmbM_SelectedIndexChanged(object sender, EventArgs e) 77 { 78 //日コンボをクリアする 79 cmbD.Items.Clear(); 80 //月 変更時 日の初期値を1にする 81 cmbD.Text = 1.ToString(); 82 83 84 85 DateTime dtNow = DateTime.Now; 86 //現在の日の選択位置を記憶しておく 87 int DayIndex = cmbD.SelectedIndex; 88 89 //日コンボをクリアする 90 cmbD.Items.Clear(); 91 92 //存在する日数分、コンボボックスに日付けを設定する 93 int Days = DateTime.DaysInMonth(cmbY.SelectedIndex + dtNow.Year - 1 , cmbM.SelectedIndex + 1); 94 for (int i = 1; i < Days + 1; i++) 95 { 96 cmbD.Items.Add(i); 97 } 98 99 //日コンボの選択肢を設定 100 if (DayIndex < Days) 101 { 102 //選択されていた日付が、存在する日数を超えていなければそのまま選択 103 cmbD.SelectedIndex = DayIndex; 104 } 105 else 106 { 107 //超えていたら、最大値を選択 108 cmbD.SelectedIndex = Days - 1; 109 } 110 111 } 112 113 private void txtymdO_TextChanged(object sender, EventArgs e) 114 { 115 116 } 117 private void btnD_Click(object sender, EventArgs e) 118 { 119 120 121 txtymdO.Text = (cmbY.Items.ToString() + "/" + cmbM.Items.ToString() + "/" + cmbD.Items.ToString()); 122 txtymdU.Text = (cmbY.ToString()+ "年" + cmbM.ToString() + "月" + cmbD.ToString() + "日"); 123 124 125 /* // 必要な変数を宣言する 126 DateTime dtNow = DateTime.Now; 127 128 // 曜日を取得する 129 DayOfWeek uWeekday = dtNow.DayOfWeek; 130 131 //違う 132 txtWeek.Text = dtNow.DayOfWeek.ToString(); 133 */ 134 135 } 136 137 private void btnClear_Click(object sender, EventArgs e) 138 { 139 DateTime dtNow = DateTime.Now; 140 141 txtymdO.ResetText(); 142 txtymdU.ResetText(); 143 txtWeek.ResetText(); 144 cmbY.Text = dtNow.Year.ToString(); 145 cmbM.Text = dtNow.Month.ToString(); 146 cmbD.Text = dtNow.Day.ToString(); 147 148 149 150 } 151 152 private void txtWeek_TextChanged(object sender, EventArgs e) 153 { 154 155 } 156 } 157} 158 159
試したこと
・btnDのところにtry catchをいれメッセージボックスに表示しようとしましたが例外処理ではないためか
メッセージボックスは出ませんでした。
・txtymdU.Text = "a"; と打ち込んだところ表示されましたので問題は
右の(cmbY.Items.ToString() + "/" + cmbM.Items.ToString() + "/" + cmbD.Items.ToString());というところはわかりました。
・txtymdO.Text = "(cmbY.Items + "/" + cmbM.Items + "/" + cmbD.Items); も"/"があるので使えませんでした。
補足情報(FW/ツールのバージョンなど)
C# Visual Studio2019を使用しています。
↓設計書は以下の通りです↓
1コンボボックス「年」の選択リストには、昨年、今年、来年の西暦を設定する。
2.コンボボックス「月」の選択リストには、1~12を設定する。
3.コンボボックス「年」の初期値は、今日の年とする。
4.コンボボックス「月」の初期値は、今日の月とする。
5.コンボボックス「日」の初期値は、今日の日とする。
・コンボボックス変更時
・コンボボックス「年」選択変更時
1.コンボボックス「日」の選択には、「年」、「月」に合わせて日にちを設定する。
閏年を考慮しましょう。
2.コンボボックス「日」の初期値は、「1」とする。
・コンボボックス「月」選択変更時
1.コンボボックス「日」の選択には、「年」、「月」に合わせて日にちを設定する。
閏年を考慮しましょう。
2.コンボボックス「日」の初期値は、「1」とする。
・「表示」ボタン押下
1.入力チェックをする。(入力チェック仕様に記載した内容)
2.コンボボックスの値から、 「yyyy/MM/dd 表示」TextBoxに値を表示する。
3.コンボボックスの値から、 「yyyy年MM月dd日 表示」TextBoxに値を表示する。
4.コンボボックスの値から、 「曜日」TextBoxに値を表示する。
・「クリア」ボタン押下
1最初に画面を開いた状態に戻る。
・「閉じる」ボタン押下
1当画面を閉じる
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/26 07:56
2020/09/26 08:00
2020/09/26 08:03
2020/09/26 08:07
2020/09/26 08:13
2020/09/26 08:16
2020/09/26 08:18
2020/09/26 08:51
2020/09/26 08:58
2020/09/26 09:55
2020/09/26 09:56
2020/09/26 10:02
2020/09/26 10:10
2020/09/26 10:23