2

私は.netの初心者です。daymonthおよびyear3つの異なるコンボボックスで表示する必要があります。それらを埋めるために、私は1950年から現在までハードコードされた値を試していました。後で、2月(28日)、うるう年、その他の問題もチェックする必要があることに気付きました。値をハードコーディングせずにこれを行う他の方法はありますか?

インターネットで答えを探しているときに、使いたくないdatepickerとmonthcalendarに出くわしました(私のプロジェクトは、datepickerとmonthcalendarを使用している他の友達とは異なるはずだからです)。または、コンボボックスの代わりに他の提案がある場合は共有してください。

ここに画像の説明を入力してください

私は誰かが以前にこの質問をしたと確信しています。リンクを指示してもかまいません。

nikhil agrawalの答えの後に編集:

作業コード:

cmbDay    --->  combobox
cmbMonth  --->  combobox
cmbYear   --->  combobox

FormLoadイベント

        this.cmbYear.Leave+=new EventHandler(cmbYear_Leave);
        this.cmbDay.Leave += new EventHandler(cmbYear_Leave);
        this.cmbMonth.Leave += new EventHandler(cmbYear_Leave);
        //
        for (int i = 1950; i < 2012; i++)
        {
            cmbYear.Items.Add(i.ToString());
        }
        for (int i = 1; i < 32; i++)
        {
            cmbDay.Items.Add(i.ToString());
        }
        //
        cmbDay.SelectedIndex = 0;
        cmbMonth.SelectedIndex = 0;
        cmbYear.SelectedIndex = 0;

OnLeaveイベント

private void cmbYear_Leave(object sender, EventArgs e)
    {
        int day = DateTime.DaysInMonth(Convert.ToInt32(cmbYear.Text), cmbMonth.SelectedIndex+1);                       
        if (day <= cmbDay.SelectedIndex)
        {
            //alert message or your managing code.
        }
    }             

PS:cmbMonth文字列形式です( "Jan"、 "Feb"、 "Mar"、...)

4

3 に答える 3

3

3つすべてに、日付1から31、1月から12月、1950年から現在の年などのすべての可能な値を入力します。

を使用して3つすべてに焦点を合わせなくなったときに有効な日付を確認します

DateTime.DaysInMonth(int year, int month);

年の場合は選択したアイテムをintに直接キャストでき、月の場合はselectedindex +1を見つけることができます(cozインデックスは0ベースです)。

次に、フォーカスが失われた場合(3つすべてのフォーカスが失われた場合の1つのフォーカスが失われたイベント)、日付がメソッドによって返された日数以下であるかどうかを確認します。そうでない場合は、アラートメッセージなど。

于 2012-10-13T11:10:17.817 に答える
1

月の指定に基づいて日コンボボックスの値を入力しますか?このコードを試すことができます。それはあなたを助けるかもしれません。このコードを書くには、cmboboxselectedIndexChangeイベントを記述します。

 if(cmbMonth.Text=="feb")  //if(cmbMonth.SelectedIndex.Equals(specify index))
  {
    for(i=0;i<29;i++)
    {
       cmbDay.Item.Add(i.ToString());
    }
  }
  else
   {
    for(i=1;i<32;i++)
    {
       cmbDay.Item.Add(i.ToString());
    }
   }

そのように、他の月の検証も行うことができます。

于 2012-10-13T12:55:05.003 に答える
0

アイテムのsをforループステートメントに書き込みます

cmbDay.Items.Add(i.ToString());のように cmbDay.Items.Add(i.ToString());

于 2014-01-10T12:04:53.673 に答える