2013-04-17 79 views
0

我正在使用C++/CLI Windows窗体应用程序。取消选择DataGridView行

我有一个DVG,我想通过点击DVG的空白区域来取消选择行。我尝试了几种方法,但都没有成功。 1)

System::Void Form1::dataGridView1_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) 
    { 
     if (e->Button == System::Windows::Forms::MouseButtons::Left) 
     { 
      if (dataGridView1->HitTest(e->X, e->Y)->Equals(DataGrid::HitTestInfo::Nowhere)) 
      { 
       dataGridView1->ClearSelection(); 
      } 
     } 
    } 

2)这种变异会导致错误(错误1错误C3063:运算符 '==':所有操作数必须具有相同的枚举类型) )

if (e->Button == System::Windows::Forms::MouseButtons::Left) 
     { 
      if ((dataGridView1->HitTest(e->X, e->Y)->Type) == DataGrid::HitTestType::None) 
      { 
       dataGridView1->ClearSelection(); 
      } 
     } 

回答

0

的名字你变量是dataGridView1。这意味着我使用DataGridView而不是DataGrid。您应该使用DataGridView::HitTestInfo::Nowhere而不是DataGrid::HitTestInfo::NowhereDataGridViewHitTestType而不是DataGrid::HitTestType

在第一个示例中,您将比较DataGridView::HitTestInfoDataGrid::HitTestInfo::Nowhere。你打电话给Equals(object, object)方法,所以它是一个有效的代码行,但是这些是不同的类,永远不会返回相同的,这就是为什么选择永远不会被清除。

在第二个示例中,您将DataGridViewHitTestTypeDataGrid::HitTestType比较,这会生成编译器错误。