C#使用Wins自己制作日歷_第1頁(yè)
C#使用Wins自己制作日歷_第2頁(yè)
C#使用Wins自己制作日歷_第3頁(yè)
C#使用Wins自己制作日歷_第4頁(yè)
C#使用Wins自己制作日歷_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、自制WindowsForms日歷新建Windows Forms應(yīng)用程序。建立一個(gè)窗體DateForm。加入幾個(gè)控件:ComboBox:cboYear(年)ComboBox:cboMonth(月)DataGridView:dgvDate 加入7個(gè)列 分別代表星期日、一、二、三、四、五、六RichTextBox:rtbInfo 查看當(dāng)前選中日期信息如下圖:需要處理的內(nèi)容:一、在窗體的Load事件中初始化年、月、以及加載當(dāng)前的年月日(窗體加載事件Load) 二、當(dāng)年改變時(shí),dgv表格日期的改變(選擇的索引改變事件SelectedIndexChanged)三、對(duì)月改變時(shí),dgv表格日期的改變(選擇的索

2、引改變事件SelectedIndexChanged)四、選中一個(gè)日期時(shí),顯示信息(表格的單元格獲得焦點(diǎn)事件CellEnter)程序的主要代碼如下(窗體生成的代碼略):using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace YlqForm public partial class DateForm : Form /是否激

3、活下拉框選擇內(nèi)容的改變事件全部加載基本內(nèi)容后再激活 bool enabledSelectedEvent = false; public DateForm() InitializeComponent(); / / 初始化數(shù)據(jù)設(shè)置年的范圍為2099年之間 / private void InitialData() /年 DataTable dt = new DataTable(); dt.Columns.Add(ID, typeof(int); dt.Columns.Add(Name, typeof(string); for (int i = 1900; i 2100; i+) dt.Rows.Ad

4、d(i, i + 年); cboYear.DataSource = dt; cboYear.DisplayMember = Name; cboYear.ValueMember = ID; /月 DataTable dtMonth = dt.Clone(); dtMonth.Rows.Add(1, 一月); dtMonth.Rows.Add(2, 二月); dtMonth.Rows.Add(3, 三月); dtMonth.Rows.Add(4, 四月); dtMonth.Rows.Add(5, 五月); dtMonth.Rows.Add(6, 六月); dtMonth.Rows.Add(7, 七

5、月); dtMonth.Rows.Add(8, 八月); dtMonth.Rows.Add(9, 九月); dtMonth.Rows.Add(10, 十月); dtMonth.Rows.Add(11, 十一月); dtMonth.Rows.Add(12, 十二月); cboMonth.DataSource = dtMonth; cboMonth.DisplayMember = Name; cboMonth.ValueMember = ID; / / 窗體加載事件 / / / private void DateForm_Load(object sender, EventArgs e) /只能選擇

6、一個(gè)單元格、列不可排序 dgvDate.MultiSelect = false; for (int i = 0; i 7; i+) dgvDate.Columnsi.SortMode = DataGridViewColumnSortMode.NotSortable; InitialData(); /默認(rèn)為當(dāng)前年月 DateTime currentDate = DateTime.Now; for (int i = 0; i cboYear.Items.Count; i+) DataRowView drv = cboYear.Itemsi as DataRowView; if (Convert.T

7、oInt32(drv.RowID) = currentDate.Year) cboYear.SelectedIndex = i; break; for (int i = 0; i cboMonth.Items.Count; i+) DataRowView drv = cboMonth.Itemsi as DataRowView; if (Convert.ToInt32(drv.RowID) = currentDate.Month) cboMonth.SelectedIndex = i; break; DisplayDate(currentDate.Year, currentDate.Month

8、); for (int i = 0; i dgvDate.Rows.Count; i+) bool isBreak = false; for (int j = 0; j 7; j+) if (Convert.ToString(dgvDatej, i.Value) = currentDate.Day.ToString() isBreak = true; dgvDatej, i.Selected = true; break; if (isBreak) break; /D2: 格式化為位數(shù)字不足位則前面補(bǔ) rtbInfo.Text = string.Format(當(dāng)前日期:0年1:D2月2:D2日

9、3, currentDate.Year, currentDate.Month, currentDate.Day, GetWeekDay(currentDate.DayOfWeek); enabledSelectedEvent = true; / 將輸出一個(gè)左大括號(hào)將輸出一個(gè)右大括號(hào) /MessageBox.Show(string.Format(0-1, abc, 123); / / 顯示某年某月的日歷 / / / private void DisplayDate(int year, int month) dgvDate.Rows.Clear(); DateTime firstDay = new

10、 DateTime(year, month, 1); int columnIndex = (int)firstDay.DayOfWeek; int maxDay = GetMaxDay(year, month); /某月的第一天的星期數(shù)對(duì)應(yīng)列的索引即當(dāng)月天數(shù)需要額外增加columnIndex /當(dāng)月總天數(shù)設(shè)定為:columnIndex+maxDay??偡猪?yè)數(shù):(x+(n-1)/n 其中n=7 /表格共有行數(shù):(columnIndex+maxDay+6)/7 取整 int day = 1; for (int i = 0; i (columnIndex + maxDay + 6) / 7; i+)

11、 int index = dgvDate.Rows.Add(); for (int j = 0; j = columnIndex) dgvDatej, index.Value = day; day+; else dgvDatej, index.Value = day; day+; if (day maxDay) break; / / 獲得某年某月有多少天 / / / / private int GetMaxDay(int year, int month) bool isLeapYear = DateTime.IsLeapYear(year); switch (month) case 1: ca

12、se 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11: return 30; case 2: return isLeapYear ? 29 : 28; default: return 0; / / 獲得星期的中文描述 / / / private string GetWeekDay(DayOfWeek week) switch (week) case DayOfWeek.Sunday: return 星期日; case DayOfWeek.Monday: return

13、星期一; case DayOfWeek.Tuesday: return 星期二; case DayOfWeek.Wednesday: return 星期三; case DayOfWeek.Thursday: return 星期四; case DayOfWeek.Friday: return 星期五; case DayOfWeek.Saturday: return 星期六; default: return ; / / 年、月改變事件 / / / private void cboYear_SelectedIndexChanged(object sender, EventArgs e) if (en

14、abledSelectedEvent) DisplayDate(Convert.ToInt32(cboYear.SelectedValue), Convert.ToInt32(cboMonth.SelectedValue); / / 當(dāng)前單元格更改或者該單元格接收到輸入焦點(diǎn)時(shí)發(fā)生提示當(dāng)前選中日期 / private void dgvDate_CellEnter(object sender, DataGridViewCellEventArgs e) if (dgvDate.SelectedCells.Count 0) DateTime currentDate = new DateTime(Convert.ToInt32(cboYear.SelectedValue), Convert.ToInt32(cboMo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論