




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、基于C#的WinForm中DataGridView控件操作匯總一、單元格內(nèi)容的操作 */ 取得當前單元格內(nèi)容 Console.WriteLine(DataGridView1.CurrentCell.Value); / 取得當前單元格的列 Index Console.WriteLine(DataGridView1.CurrentCell.ColumnIndex); / 取得當前單元格的行 Index Console.WriteLine(DataGridView1.CurrentCell.RowIndex);*另外,使用 DataGridView.CurrentCellAddress 屬性(而不是
2、直接訪問單元格)來確定單元格所在的行:DataGridView.CurrentCellAddress.Y 和列: DataGridView.CurrentCellAddress.X 。這對于避免取消共享行的共享非常有用。 當前的單元格可以通過設定 DataGridView 對象的 CurrentCell 來改變??梢酝ㄟ^ CurrentCell 來設定 DataGridView 的激活單元格。將 CurrentCell 設為 Nothing(null) 可以取消激活的單元格。/ 設定 (0, 0) 為當前單元格 DataGridView1.CurrentCell = DataGridView1
3、0, 0; 在整行選中模式開啟時,你也可以通過 CurrentCell 來設定選定行。 / / 向下遍歷 / / / private void button4_Click(object sender, EventArgs e) . int row = this.dataGridView1.CurrentRow.Index + 1; if (row this.dataGridView1.RowCount - 1) row = 0; this.dataGridView1.CurrentCell = this.dataGridView10, row; / / 向上遍歷 / / / private v
4、oid button5_Click(object sender, EventArgs e) . int row = this.dataGridView1.CurrentRow.Index - 1; if (row 0) row = this.dataGridView1.RowCount - 1; this.dataGridView1.CurrentCell = this.dataGridView10, row; * 注意: this.dataGridView 的索引器的參數(shù)是: columnIndex, rowIndex 或是 columnName, rowIndex 這與習慣不同。*Data
5、GridView 設定單元格只讀:1) 使用 ReadOnly 屬性 ?如果希望,DataGridView 內(nèi)所有單元格都不可編輯, 那么只要: / 設置 DataGridView1 為只讀 DataGridView1.ReadOnly = true;此時,用戶的新增行操作和刪除行操作也被屏蔽了。 *如果希望,DataGridView 內(nèi)某個單元格不可編輯, 那么只要: / 設置 DataGridView1 的第2列整列單元格為只讀 DataGridView1.Columns1.ReadOnly = true; / 設置 DataGridView1 的第3行整行單元格為只讀 DataGridV
6、iew1.Rows2.ReadOnly = true; / 設置 DataGridView1 的0,0單元格為只讀 DataGridView10, 0.ReadOnly = true; *DataGridView 行頭列頭的單元格/ 改變DataGridView1的第一列列頭內(nèi)容 DataGridView1.Columns0.HeaderCell.Value = 第一列; / 改變DataGridView1的第一行行頭內(nèi)容 DataGridView1.Rows0.HeaderCell.Value = 第一行; / 改變DataGridView1的左上頭部單元內(nèi)容 DataGridView1.T
7、opLeftHeaderCell.Value = 左上; 另外你也可以通過 HeaderText 來改變他們的內(nèi)容。/ 改變DataGridView1的第一列列頭內(nèi)容 DataGridView1.Columns0.HeaderText = 第一列; * DataGridView 單元格的ToolTip的設置 DataGridView.ShowCellToolTips = True 的情況下, 單元格的 ToolTip 可以表示出來。對于單元格窄小,無法完全顯示的單元格, ToolTip 可以顯示必要的信息。 1) 設定單元格的ToolTip內(nèi)容 / 設定單元格的ToolTip內(nèi)容 DataGr
8、idView10, 0.ToolTipText = 該單元格的內(nèi)容不能修改; / 設定列頭的單元格的ToolTip內(nèi)容 DataGridView1.Columns0.ToolTipText = 該列只能輸入數(shù)字; / 設定行頭的單元格的ToolTip內(nèi)容 DataGridView1.Rows0.HeaderCell.ToolTipText = 該行單元格內(nèi)容不能修改; 2) CellToolTipTextNeeded 事件 在批量的單元格的 ToolTip 設定的時候,一個一個指定那么設定的效率比較低, 這時候可以利用 CellToolTipTextNeeded 事件。當單元格的 ToolTi
9、pText 變化的時候也會引發(fā)該事件。但是,當DataGridView的DataSource被指定且VirualMode=True的時候,該事件不會被引發(fā)。 / CellToolTipTextNeeded事件處理方法 private void DataGridView1_CellToolTipTextNeeded(object sender, DataGridViewCellToolTipTextNeededEventArgs e) e.ToolTipText = e.ColumnIndex.ToString() + , + e.RowIndex.ToString(); *DataGridVi
10、ew 的單元格的邊框、 網(wǎng)格線樣式的設定 1) DataGridView 的邊框線樣式的設定 DataGridView 的邊框線的樣式是通過 DataGridView.BorderStyle 屬性來設定的。 BorderStyle 屬性設定值是一個 BorderStyle 枚舉: FixedSingle(單線,默認)、Fixed3D、None。 2) 單元格的邊框線樣式的設定 單元格的邊框線的樣式是通過 DataGridView.CellBorderStyle 屬性來設定的。 CellBorderStyle 屬性設定值是 DataGridViewCellBorderStyle 枚舉。(詳細參見
11、 MSDN) 另外,通過 DataGridView.ColumnHeadersBorderStyle 和 RowHeadersBorderStyle 屬性可以修改 DataGridView 的頭部的單元格邊框線樣式。 屬性設定值是 DataGridViewHeaderBorderStyle 枚舉。(詳細參見 MSDN) 3) 單元格的邊框顏色的設定 單元格的邊框線的顏色可以通過 DataGridView.GridColor 屬性來設定的。默認是 ControlDarkDark 。但是只有在 CellBorderStyle 被設定為 Single、SingleHorizontal、SingleV
12、ertical 的條件下才能改變其邊框線的顏色。同樣,ColumnHeadersBorderStyle 以及 RowHeadersBorderStyle 只有在被設定為 Single 時,才能改變顏色。 4) 單元格的上下左右的邊框線式樣的單獨設定 CellBorderStyle只能設定單元格全部邊框線的式樣。要單獨改變單元格某一邊邊框式樣的話,需要用到DataGridView.AdvancedCellBorderStyle屬性。如示例: 單元格的上邊和左邊線設為二重線 單元格的下邊和右邊線設為單重線 DataGridView1.AdvancedCellBorderStyle.Top = _
13、DataGridViewAdvancedCellBorderStyle.InsetDouble DataGridView1.AdvancedCellBorderStyle.Right = _ DataGridViewAdvancedCellBorderStyle.Inset DataGridView1.AdvancedCellBorderStyle.Bottom = _ DataGridViewAdvancedCellBorderStyle.Inset DataGridView1.AdvancedCellBorderStyle.Left = _ DataGridViewAdvancedCell
14、BorderStyle.InsetDouble 同樣,設定行頭單元格的屬性是: AdvancedRowHeadersBorderStyle, 設定列頭單元格屬性是:AdvancedColumnHeadersBorderStyle。*DataGridView 單元格表示值的自定義 通過CellFormatting事件,可以自定義單元格的表示值。(比如:值為Error的時候,單元格被設定為紅色) 下面的示例:將“Colmn1”列的值改為大寫。 /CellFormatting 事件處理方法 private void DataGridView1_CellFormatting(object sender
15、, DataGridViewCellFormattingEventArgs e) DataGridView dgv = (DataGridView)sender; / 如果單元格是“Column1”列的單元格 if (dgv.Columnse.ColumnIndex.Name = Column1 & e.Value is string) / 將單元格值改為大寫 string str = e.Value.ToString(); e.Value = str.ToUpper(); / 應用該Format,F(xiàn)ormat完畢。 e.FormattingApplied = true; CellFormat
16、ting 事件的DataGridViewCellFormattingEventArgs對象的Value屬性一開始保存著未被格式化的值。當Value屬性被設定表示用的文本之后,把FormattingApplied屬性做為True,告知DataGridView文本已經(jīng)格式化完畢。如果不這樣做的話,DataGridView會根據(jù)已經(jīng)設定的 Format,NullValue,DataSourceNullValue,F(xiàn)ormatProvider屬性會將Value屬性會被重新格式化一遍。*DataGridView 用戶輸入時,單元格輸入值的設定 通過 DataGridView.CellParsing 事件
17、可以設定用戶輸入的值。下面的示例:當輸入英文文本內(nèi)容的時候,立即被改變?yōu)榇髮憽?CellParsing 事件處理方法 private void DataGridView1_CellParsing(object sender, DataGridViewCellParsingEventArgs e) DataGridView dgv = (DataGridView)sender; /單元格列為“Column1”時 if (dgv.Columnse.ColumnIndex.Name = Column1 & e.DesiredType = typeof(string) /將單元格值設為大寫 e.Val
18、ue = e.Value.ToString().ToUpper(); /解析完畢 e.ParsingApplied = true; 二 、行/列的操作 * DataGridView 不顯示最下面的新行: 通常 DataGridView 的最下面一行是用戶新追加的行(行頭顯示 * )。如果不想讓用戶新追加行即不想顯示該新行,可以將 DataGridView 對象的 AllowUserToAddRows 屬性設置為 False。 / 設置用戶不能手動給 DataGridView1 添加新行 DataGridView1.AllowUserToAddRows = false; 但是,可以通過程序: D
19、ataGridViewRowCollection.Add 為 DataGridView 追加新行。 補足: 如果 DataGridView 的 DataSource 綁定的是 DataView, 還可以通過設置 DataView.AllowAdd 屬性為 False 來達到同樣的效果。*DataGridView 判斷新增行: DataGridView的AllowUserToAddRows屬性為True時也就是允許用戶追加新行的場合下,DataGridView的最后一行就是新追加的行(*行)。使用 DataGridViewRow.IsNewRow 屬性可以判斷哪一行是新追加的行。另外,通過Dat
20、aGridView.NewRowIndex 可以獲取新行的行序列號。在沒有新行的時候,NewRowIndex = -1。 If (DataGridView1.CurrentRow.IsNewRow) Console.WriteLine(當前行為新追加行。) ;Else Console.WriteLine(當前行不是新追加行。) ;*DataGridView 行的用戶刪除操作的自定義: 1) 無條件的限制行刪除操作。 默認時,DataGridView 是允許用戶進行行的刪除操作的。如果設置 DataGridView對象的AllowUserToDeleteRows屬性為 False 時, 用戶的行
21、刪除操作就被禁止了。 / 禁止DataGridView1的行刪除操作。 DataGridView1.AllowUserToDeleteRows = false; 但是,通過 DataGridViewRowCollection.Remove 還是可以進行行的刪除。 補足: 如果 DataGridView 綁定的是 DataView 的話,通過 DataView.AllowDelete 也可以控制行的刪除。 *行刪除時的條件判斷處理。 用戶在刪除行的時候,將會引發(fā) DataGridView.UserDeletingRow 事件。 在這個事件里,可以判斷條件并取消刪除操作。 / DataGridVi
22、ew1 的 UserDeletingRow 事件 private void DataGridView1_UserDeletingRow( object sender, DataGridViewRowCancelEventArgs e) / 刪除前的用戶確認。 if (MessageBox.Show(確認要刪除該行數(shù)據(jù)嗎?, 刪除確認, MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK) / 如果不是 OK,則取消。 e.Cancel = true; *DataGridView 行、列的隱藏和刪除: 1
23、) 行、列的隱藏 / DataGridView1的第一列隱藏 DataGridView1.Columns0.Visible = false; / DataGridView1的第一行隱藏 DataGridView1.Rows0.Visible = false; 2) 行頭、列頭的隱藏 / 列頭隱藏 DataGridView1.ColumnHeadersVisible = false; / 行頭隱藏 DataGridView1.RowHeadersVisible = false; 3) 行和列的刪除 刪除名為Column1的列 DataGridView1.Columns.Remove(Column
24、1); 刪除第一列 DataGridView1.Columns.RemoveAt(0); 刪除第一行 DataGridView1.Rows.RemoveAt(0); 4) 刪除選中行 foreach (DataGridViewRow r in DataGridView1.SelectedRows) if (!r.IsNewRow) DataGridView1.Rows.Remove(r); *DataGridView 禁止列或者行的Resize: 1) 禁止所有的列或者行的Resize / 禁止用戶改變DataGridView1的所有列的列寬 DataGridView1.AllowUserTo
25、ResizeColumns = false; /禁止用戶改變DataGridView1所有行的行高 DataGridView1.AllowUserToResizeRows = false; 但是可以通過 DataGridViewColumn.Width 或者 DataGridViewRow.Height 屬性設定列寬和行高。 *2) 禁止指定行或者列的Resize / 禁止用戶改變DataGridView1的第一列的列寬 DataGridView1.Columns0.Resizable = DataGridViewTriState.False; / 禁止用戶改變DataGridView1的第一
26、列的行寬 DataGridView1.Rows0.Resizable = DataGridViewTriState.False; 關于 NoSet 當 Resizable 屬性設為 DataGridViewTriState.NotSet 時, 實際上會默認以 DataGridView 的 AllowUserToResizeColumns 和 AllowUserToResizeRows 的屬性值進行設定。比如: DataGridView.AllowUserToResizeColumns = False 且 Resizable 是 NoSet 設定時,Resizable = False 。 判斷
27、Resizable 是否是繼承設定了 DataGridView 的 AllowUserToResizeColumns 和 AllowUserToResizeRows 的屬性值, 可以根據(jù) State 屬性判斷。如果 State 屬性含有 ResizableSet,那么說明沒有繼承設定。 3) 列寬和行高的最小值的設定 / 第一列的最小列寬設定為 100 DataGridView1.Columns0.MinimumWidth = 100; / 第一行的最小行高設定為 50 DataGridView1.Rows0.MinimumHeight = 50; 4) 禁止用戶改變行頭的寬度以及列頭的高度
28、/ 禁止用戶改變列頭的高度 DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; / 禁止用戶改變行頭的寬度 DataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.EnableResizing; *DataGridView 列寬和行高自動調(diào)整的設定:/ 設定包括Header和所有單元格的列寬自動調(diào)整 DataGridView1.AutoSizeColu
29、mnsMode = DataGridViewAutoSizeColumnsMode.AllCells; / 設定包括Header和所有單元格的行高自動調(diào)整 DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; AutoSizeColumnsMode 屬性的設定值枚舉請參照 msdn 的 DataGridViewAutoSizeRowsMode 說明。 2)指定列或行自動調(diào)整 / 第一列自動調(diào)整 DataGridView1.Columns0.AutoSizeMode =DataGridViewAutoSiz
30、eColumnMode.DisplayedCells; AutoSizeMode 設定為 NotSet 時, 默認繼承的是 DataGridView.AutoSizeColumnsMode 屬性。 3) 設定列頭的高度和行頭的寬度自動調(diào)整 / 設定列頭的寬度可以自由調(diào)整 DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; / 設定行頭的寬度可以自由調(diào)整 DataGridView1.RowHeadersWidthSizeMode = DataGridViewRo
31、wHeadersWidthSizeMode.AutoSizeToAllHeaders; 4) 隨時自動調(diào)整 a, 臨時的,讓列寬自動調(diào)整,這和指定AutoSizeColumnsMode屬性一樣。 / 讓 DataGridView1 的所有列寬自動調(diào)整一下。 DataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells); / 讓 DataGridView1 的第一列的列寬自動調(diào)整一下。 DataGridView1.AutoResizeColumn(0, DataGridViewAutoSizeColumnMod
32、e.AllCells);上面調(diào)用的 AutoResizeColumns 和 AutoResizeColumn 當指定的是DataGridViewAutoSizeColumnMode.AllCells 的時候,參數(shù)可以省略。即: DataGridView1.AutoResizeColumn(0) 和 DataGridView1.AutoResizeColumns() b,臨時的,讓行高自動調(diào)整 / 讓 DataGridView1 的所有行高自動調(diào)整一下。 DataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells); /讓
33、 DataGridView1 的第一行的行高自動調(diào)整一下。 DataGridView1.AutoResizeRow(0, DataGridViewAutoSizeRowMode.AllCells);上面調(diào)用的 AutoResizeRows 和 AutoResizeRow 當指定的是DataGridViewAutoSizeRowMode.AllCells 的時候,參數(shù)可以省略。即:DataGridView1.AutoResizeRow (0) 和 DataGridView1.AutoResizeRows() c,臨時的,讓行頭和列頭自動調(diào)整 / 列頭高度自動調(diào)整 DataGridView1.Au
34、toResizeColumnHeadersHeight(); / 行頭寬度自動調(diào)整 DataGridView1.AutoResizeRowHeadersWidth( DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders); 關于性能: 通過 AutoSizeColumnsMode 或者 AutoSizeRowsMode 屬性所指定的單元格進行自動調(diào)整時,如果調(diào)整次數(shù)過于多那么將可能導致性能下降,尤其是在行和列數(shù)比較多的情況下。在這時用 DisplayedCells 代替 AllCells 能減少非所見的單元格的調(diào)整,從而提高性能。 *
35、DataGridView 凍結列或行1) 列凍結 DataGridViewColumn.Frozen 屬性為 True 時, 該列左側的所有列被固定, 橫向滾動時固定列不隨滾動條滾動而左右移動。這對于重要列固定顯示很有用。/ DataGridView1的左側2列固定 DataGridView1.Columns1.Frozen = true; 但是,DataGridView.AllowUserToOrderColumns = True 時,固定列不能移動到非固定列, 反之亦然。 2) 行凍結 DataGridViewRow.Frozen 屬性為 True 時, 該行上面的所有行被固定, 縱向滾動
36、時固定行不隨滾動條滾動而上下移動。/ DataGridView1 的上3行固定 DataGridView1.Rows2.Frozen = true;*DataGridView 列順序的調(diào)整設定 DataGridView 的 AllowUserToOrderColumns 為 True 的時候, 用戶可以自由調(diào)整列的順序。 當用戶改變列的順序的時候,其本身的 Index 不會改變,但是 DisplayIndex 改變了。你也可以通過程序改變 DisplayIndex 來改變列的順序。 列順序發(fā)生改變時會引發(fā) ColumnDisplayIndexChanged 事件: / DataGridView
37、1的ColumnDisplayIndexChanged事件處理方法 private void DataGridView1_ColumnDisplayIndexChanged(object sender, DataGridViewColumnEventArgs e) Console.WriteLine(0 的位置改變到 1 , e.Column.Name, e.Column.DisplayIndex); *DataGridView 新加行的默認值的設定 需要指定新加行的默認值的時候,可以在DataGridView.DefaultValuesNeeded事件里處理。在該事件中處理除了可以設定默認值
38、以外,還可以指定某些特定的單元格的ReadOnly屬性等。/ DefaultValuesNeeded 事件處理方法 private void DataGridView1_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e) / 設定單元格的默認值 e.Row.CellsColumn1.Value = 0; e.Row.CellsColumn2.Value = -; 三、針對datagridview全局屬性的設置 * 使用 EditMode 屬性 DataGridView.EditMode 屬性被設置為 DataGridVi
39、ewEditMode.EditProgrammatically 時,用戶就不能手動編輯單元格的內(nèi)容了。但是可以通過程序,調(diào)用 DataGridView.BeginEdit 方法,使單元格進入編輯模式進行編輯。 DataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically; *根據(jù)條件設定單元格的不可編輯狀態(tài) 當一個一個的通過單元格坐標設定單元格 ReadOnly 屬性的方法太麻煩的時候,你可以通過 CellBeginEdit 事件來取消單元格的編輯。*/ CellBeginEdit 事件處理方法 private void
40、DataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) DataGridView dgv = (DataGridView)sender; /是否可以進行編輯的條件檢查 if (dgv.Columnse.ColumnIndex.Name = Column1 & !(bool)dgvColumn2, e.RowIndex.Value) / 取消編輯 e.Cancel = true; *DataGridView 剪切板的操作 DataGridView.ClipboardCopyMode 屬性被設定為
41、DataGridViewClipboardCopyMode.Disable 以外的情況時,Ctrl + C按下的時候,被選擇的單元格的內(nèi)容會拷貝到系統(tǒng)剪切板內(nèi)。格式有: Text, UnicodeText,Html, CommaSeparatedValue??梢灾苯诱迟N到 Excel 內(nèi)。 ClipboardCopyMode 還可以設定 Header部分是否拷貝: EnableAlwaysIncludeHeaderText 拷貝Header部分、EnableWithoutHeaderText 則不拷貝。默認是 EnableWithAutoHeaderText , Header 如果選擇了的話,
42、就拷貝。 1) 編程方式實現(xiàn)剪切板的拷貝 Clipboard.SetDataObject(DataGridView1.GetClipboardContent() 2) DataGridView 的數(shù)據(jù)粘貼 實現(xiàn)剪切板的拷貝比較容易,但是實現(xiàn) DataGridView 的直接粘貼就比較難了。Ctrl + V按下進行粘貼時,DataGridView 沒有提供方法,只能自己實現(xiàn)。 以下,是粘貼時簡單的事例代碼,將拷貝數(shù)據(jù)粘貼到以選擇單元格開始的區(qū)域內(nèi)。/當前單元格是否選擇的判斷 if (DataGridView1.CurrentCell = null) return; int insertRowIn
43、dex = DataGridView1.CurrentCell.RowIndex; / 獲取剪切板的內(nèi)容,并按行分割 string pasteText = Clipboard.GetText(); if (string.IsNullOrEmpty(pasteText) return; pasteText = pasteText.Replace( , ); pasteText = pasteText.Replace( , ); pasteText.TrimEnd(new char ); string lines = pasteText.Split( ); bool isHeader = true
44、; foreach (string line in lines) / 是否是列頭 if (isHeader) isHeader = false; continue; / 按 Tab 分割數(shù)據(jù) string vals = line.Split( ); / 判斷列數(shù)是否統(tǒng)一 if (vals.Length - 1 != DataGridView1.ColumnCount) throw new ApplicationException(粘貼的列數(shù)不正確。); DataGridViewRow row = DataGridView1.RowsinsertRowIndex; / 行頭設定 row.Head
45、erCell.Value = vals0; / 單元格內(nèi)容設定 for (int i = 0; i Row Column DataGridView *CellContextMenuStripNeeded、RowContextMenuStripNeeded事件 利用CellContextMenuStripNeeded事件可以設定單元格的右鍵菜單,尤其但需要右鍵菜單根據(jù)單元格值的變化而變化的時候。比起使用循環(huán)遍歷,使用該事件來設定右鍵菜單的效率更高。但是,在DataGridView使用了DataSource綁定而且是 VirtualMode的時候,該事件將不被引發(fā)。 /CellContextMen
46、uStripNeeded事件處理方法 private void DataGridView1_CellContextMenuStripNeeded(object sender, DataGridViewCellContextMenuStripNeededEventArgs e) DataGridView dgv = (DataGridView)sender; if (e.RowIndex 0) /列頭的ContextMenuStrip設定 e.ContextMenuStrip = this.ContextMenuStrip1; else if (e.ColumnIndex 0) /行頭的Cont
47、extMenuStrip設定 e.ContextMenuStrip = this.ContextMenuStrip2; else if (dgve.ColumnIndex, e.RowIndex.Value is int) /如果單元格值是整數(shù)時 e.ContextMenuStrip = this.ContextMenuStrip3; 同樣,可以通過RowContextMenuStripNeeded事件來設定行的右鍵菜單。/RowContextMenuStripNeeded事件處理方法 private void DataGridView1_RowContextMenuStripNeeded(o
48、bject sender, DataGridViewRowContextMenuStripNeededEventArgs e) DataGridView dgv = (DataGridView)sender; /當Column1列是Bool型且為True時、設定其的ContextMenuStrip object boolVal = dgvColumn1, e.RowIndex.Value; Console.WriteLine(boolVal); if (boolVal is bool & (bool)boolVal) e.ContextMenuStrip = this.ContextMenuS
49、trip1; CellContextMenuStripNeeded 事件處理方法的參數(shù)中、e.ColumnIndex=-1表示行頭、e.RowIndex=-1表示列頭。 RowContextMenuStripNeeded則不存在e.RowIndex=-1的情況。四、針對觸發(fā)事件的一些介紹 我認為只要記住常用的即可,比如鼠標的操作,一些常見的點擊觸發(fā)事件;比如_CellParsing()一般在編輯狀態(tài)結束的時候發(fā)生。其他的用到的時候算查即可,時間長了掌握的也就多了。本文來自CSDN博客,轉(zhuǎn)載請標明出處:/nnsword/archive/2009/12/16/5020088.aspx附錄資料:不需
50、要的可以自行刪除C語言編譯環(huán)境中的調(diào)試功能及常見錯誤提示調(diào)試功能1常用健 : 激活系統(tǒng)菜單: 將光標在編輯窗口和、信息窗口之間切換: 加載一個文件+: 查看程序運行結果: 得到有關編輯器在線幫助+: 得到有關C語言的在線幫助+: 終止正在運行的程序2塊操作 KB: 定義塊首 KK: 定義塊尾 KV: 塊移動 KC: 塊復制 KY: 塊刪除 KH: 取消塊定義3查找、替換和刪除操作 QF: 查找字符串 QA: 查找并替換字符串 Option: G(全程), B(向文件頭), N(直接替換) Y : 刪除一行 QY: 刪除從光標位置到行末的所有字符編譯中的常見錯誤例析(1)警告類錯誤 XXXdec
51、lare but never used 變量XXX已定義但從未用過。 XXXis assigned a value which is never used 變量XXX已賦值但從未用過。 Code has no effect 程序中含有沒有實際作用的代碼。 Non-portable pointer conversion 不適當?shù)闹羔樲D(zhuǎn)換,可能是在應該使用指針的地方用了一個非0的數(shù)值。 Possible use of XXXbefore definition 表達式中使用了未賦值的變量 Redeclaration of main 一個程序文件中主函數(shù)main不止一個。 Suspicious poi
52、nter conversion 可疑的指針轉(zhuǎn)換。通常是使用了基本類型不匹配的指針。 Unreachable code 程序含有不能執(zhí)行到的代碼。(2)錯誤或致命錯誤 Compound statement missing in function main 程序結尾缺少括號。 “”expected; “(”expected等 復合語句或數(shù)組初始化的結尾缺少“)”;“(”。 Case outside of switch case 不屬于Switch結構,多由于switch結構中的花括號不配對所致。 Case statement missing : switch結構中的某個case之后缺少冒號。 Co
53、nstant expression required 定義數(shù)組時指定的數(shù)組長度不是常量表達式。 Declaration syntax error 結構體或聯(lián)合類型的定義后缺少分號。 Declaration was expected 缺少說明,通常是因為缺少分界符如逗號、分號、右圓括號等所引起的。 Default outside switch Default部分放到了switch結構之外,一般是因為花括號不匹配而引起的。 do statement must have while do語句中缺少相應的while部分。 Expression syntax 表達式語法錯。如表達式中含有兩個連續(xù)的運算符
54、 Extra parameter in call fun 調(diào)用函數(shù)fun時給出了多余的實參。 Function should return a value 函數(shù)應該返回一個值,否則與定義時的說明類型不匹配。 Illegal use of pointer 指針被非法引用,一般是使用了非法的指針運算。 Invalid pointer addition 指針相加非法。一個指針(地址)可以和一個整數(shù)相加,但兩個指針不能相加。 Lvalue required 賦值運算的左邊是不能尋址的表達式。 Misplaced else 程序遇到了沒有配對的else No matching 表達式中的括號不配對。 P
55、ointer required on left side of_ 在“_”運算的左邊只能允許一個指針而不能是一個一般的結構體變量或聯(lián)合類型的變量。 Statement missing; 程序遇到了后面沒有分號的語句。 Too few parameters in call 調(diào)用某個函數(shù)時實參數(shù)目不夠。 Unable to open include file XXXXXXXXXXX 頭文件找不到。 Unexpected 或:或 在不希望的地方使用了或:。 Undefined symbol Xin function fun 函數(shù)fun中的變量X沒有定義。5.連接中的常見錯誤主要錯誤類似于“undef
56、ined symbol _print in modula xxx”(print沒有定義),通常是函數(shù)名書寫錯誤。6.運行中的常見錯誤Abnormal program termination 程序異常終止。通常是由于內(nèi)存使用不當所致。Floating point error : Domain 或Divide by 0 運算結果不是一個數(shù)或被0 除Null pointer assignment 對未初始化的指針賦值,程序有嚴重錯誤。User break 在運行程序時終止。7.程序的跟蹤調(diào)試利用Run菜單可以進行程序的跟蹤調(diào)試(1)GO to Cursor ()選擇該選項使程序執(zhí)行到光標所在行首先將
57、光標移到某行(一般為可執(zhí)行),選擇該功能項,則程序執(zhí)行到該行的前一行暫停。此時程序處于跟蹤調(diào)試狀態(tài),并有亮條顯示在暫停處,此時可以查詢變量或表達式的值。(2)Trace into ()執(zhí)行一條語句或一行暫停此時程序處于跟蹤調(diào)試狀態(tài),并有亮條顯示在暫停處。該選項可跟蹤到被調(diào)函數(shù)的內(nèi)部。(3)Step over ()執(zhí)行一條語句或一行暫停此時程序處于跟蹤調(diào)試狀態(tài),并有亮條顯示在暫停處。該選項將自定義函數(shù)當作一個語句執(zhí)行,不跟蹤到函程序的內(nèi)部。(4)Debug 菜單程序處于跟蹤狀態(tài)時,可使用該菜單的選項。其主要是使用Evaluate目的是查詢或更新變量或表達式的值。選擇Evaluate功能后,系統(tǒng)彈
58、出一個對話框。該對話框包含三個選項區(qū)域:Evaluate域可以輸入一個含有目前代碼中(程序暫停區(qū)的作用域)正在使用的變量名、或含變量的表達式、或常量表達式。按回車鍵后,在Result域中顯示變量或表達式的值。還可以用New value域進行調(diào)試。如果調(diào)試程序時發(fā)現(xiàn)Result域顯示的某變量或表達式的值不正確,并能估計出該變量或表達式的值,則可以將該值輸入到New value域,繼續(xù)執(zhí)行程序,其目的是肯定錯誤發(fā)生處是否在當前位置之前。如果輸入這個正確的值并將程序繼續(xù)執(zhí)行完畢而結果正確,說明在目前暫停處之前已經(jīng)發(fā)生錯誤而之后無錯誤。(5)Break/Watch用于設置斷點和監(jiān)視表達式。選擇Add
59、Watch功能選項,系統(tǒng)將彈出一個菜單,在Add Watch框中輸入變量名或表達式,按回車鍵后,系統(tǒng)在屏幕底部開辟一個窗口并顯示 該變量或表達式的值?!境R婂e誤信息語句索引】Ambiguous operators need parentheses:不明確的運算需要用括號括起 Ambiguous symbol xxx :不明確的符號 Argument list syntax error:參數(shù)表語法錯誤 Array bounds missing in function main 缺少數(shù)組界限符 Array bounds missing :丟失數(shù)組界限符 Array size too large :
60、數(shù)組尺寸太大 Bad character in paramenters :參數(shù)中有不適當?shù)淖址?Bad file name format in include directive :包含命令中文件名格式不正確 Bad ifdef directive synatax :編譯預處理ifdef有語法錯 Bad undef directive syntax :編譯預處理undef有語法錯 Bit field too large :位字段太長 Call of non-function :調(diào)用未定義的函數(shù) Call to function with no prototype :調(diào)用函數(shù)時沒有函數(shù)的說明 C
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞動合同范本 工傷
- 代理鉆床銷售企業(yè)合同范本
- 京東商城合同范本
- 人事中介合同范本
- 保險合作合同范本
- 前公司勞務合同范本
- 募資合同范本
- 2024年普洱市瀾滄縣縣第二人民醫(yī)院招聘考試真題
- 2024年宿遷市人大常委會辦公室招聘筆試真題
- 2024年欽州市第二人民醫(yī)院信息工程師招聘筆試真題
- (2024年)保安培訓圖文課件
- 中醫(yī)養(yǎng)生保健素養(yǎng)知識講座
- 雷達干擾技術概述
- JBT 7901-2023 金屬材料實驗室均勻腐蝕全浸試驗方法 (正式版)
- 2024年南通建筑電工證考試題模擬試題電工培訓試題及答案(全國通用)
- 2025小學道德與法治開學第一課(思想政治理論教育課)
- 基于STM32Cube的嵌入式系統(tǒng)應用 教案
- 動畫分鏡頭腳本設計課件
- 江蘇省成人高等教育畢業(yè)生登記表
- 促銷主管工作計劃
- 2024年管理學理論考核試題及答案
評論
0/150
提交評論