0

VS2010 のツールボックスから monthCalendar コントロールを使用していますが、カレンダーの日付を「選択可能」にしようとすると問題が発生します。選択された日付は、ユーザーが入力した残りの入力とともに配列に格納されます。私の問題に関係のない結果を数時間検索して見つけた後、ここに投稿することが最善の解決策になると感じました. どんな助けでも大歓迎です。

        int currentIndex;
        int arraySize = 0;
         Meeting[] meetingArray = new Meeting[100];

      private void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e)
    {
        e.Start.ToShortDateString();
    }

    private void calendarSaveChangesButton_Click(object sender, EventArgs e)
    {
        Meeting m = new Meeting();
        m.title = textBoxTitle.Text;
        m.location = textBoxLocation.Text;
        m.startTime = textBoxStartTime.Text;
        m.endTime = textBoxEndTime.Text;
        m.notes = notesTextBox.Text;
        meetingArray[arraySize] = m;
        currentIndex = arraySize;
        arraySize++;
        meetingListBox.Enabled = true;
        textBoxTitle.Text = "";
        textBoxLocation.Text = "";
        textBoxStartTime.Text = "";
        textBoxEndTime.Text = "";
        notesTextBox.Text = "";

        meetingListBox.Items.Add(m);
    }
4

2 に答える 2

2

フォームの monthCalendar に移動し、右クリックします。[プロパティ] を選択します。次に、[イベント] をクリックし、DateSelected をダブルクリックします。

これは VS2010 によって生成されます。

private void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e)
{

}

そのメソッド内で、e.Start.ToShortDateString()選択された日付を取得し、それを配列の適切なインデックスに割り当てます。

コメント/新しく投稿されたコードでの質問に関する更新:

あなたのプロジェクトについて私が言えることから、これがあなたにとって最良の解決策かもしれません (すべてを完全に再構築する必要はありません)。別のテキスト ボックスを追加します (dateBox という名前を付けます)。次に、DateSelected メソッド内に次のコードを追加します。

dateBox.Text = e.Start.ToShortDateString();

次に、投稿した Click メソッド内に (Meeting クラスに何らかの Date プロパティがあると仮定して)、次のコードを追加します。

m.Date = dateBox.Text;

アップデート

別の方法として (もっと単純に、なぜ以前にこれを提案しなかったのかわかりません)、stringdateStr というフォームでグローバルを定義し、それを使用して、「変更を保存」してから、に割り当てm.Dateます。これは、別のテキストボックスを作成するよりもはるかに簡単な解決策です (これはおそらく回避しようとしているものです)。

于 2013-02-21T18:29:00.273 に答える
0

MonthCalendarコントロールには、アクセスできるはずのいくつかのプロパティがあります。SelectionRange、SelectionStart、およびSelectionEndには、選択した日付の値が含まれています。

于 2013-02-21T18:33:09.223 に答える