2016-07-12 9 views
1

列内のセルが異なるセルタイプを持つことができるDataGridViewがあります。CellとDataGridViewCell CellTypeを比較する方法

たとえば、行1のセルにはセルタイプDataGridViewTextBoxCellがあります。 行2のセルには、セルタイプDataGridViewImageCellがあります。

マウスは、その列のセルの上にある場合、私は何かをする方法を作成しました:

private void DataTableCellMouseEnter(object sender, DataGridViewCellEventArgs e) 
{ 
    if 
    (
     e.RowIndex >= 0 // If the current row is not the header. 
     && e.ColumnIndex == dataGridViewDMSSettings.Columns["Example"].Index // And if the current column is the example column. 
    ) 
    { 
     // Something happing here. 
    } 
} 

は、今私は、コードを実行するために、細胞型のcomparsionを追加するだけの細胞型があればDataGridViewImageCellです。私が追加しようとした

...

&& dataGridViewDMSSettings.Rows[e.RowIndex].Cells["Example"].GetType() == DataGridViewImageCell 

...しかし、私はIntelliSenseのメッセージが出ています「DataGridViewImageCellは、現在のコンテキスト内のタイプと無効です。」

誰かがこれに対する解決策を持っていますか?

+1

'.GetType()== typeof(DataGridViewImageCell)' – stuartd

+0

UITableViewCellのように動作すると仮定すると、ベースコンストラクタにはcellidが必要です。私はどのようにそれを継承して取得するか分からないが、あなたはあなたのコンストラクタでそれを設定し、セルのcellidを取得するために独自の関数を追加することができるはずです。 – curtainrising

+0

.GetType()== typeof(DataGridViewImageCell)が機能しましたが、私はその型の型を取得する必要があることを認識しませんでした:P – kami

答えて

2

コメントに示されているように、型を値として使用するには、typeof()演算子を使用する必要があります。値のない型名は、それを使用することはできません。

dataGridViewDMSSettings.Rows[e.RowIndex].Cells["Example"].GetType() == 
    typeof(DataGridViewImageCell) 

しかし、そこに値が特定の型であるかどうかをチェックするためにもっと良い方法があり、それはis演算子です:

dataGridViewDMSSettings.Rows[e.RowIndex].Cells["Example"].GetType() is 
    DataGridViewImageCell 

ここでの重要な違いは、そのis点の継承関係であります==typeof()には正確なタイプの等価性が必要です。

+0

また、 'dataGridViewDMSSettings.Rows [e.RowIndex] .Cells ["例 "]はDataGridViewImageCell'です。 –

+1

@RezaAghaeiはい、非常に良い点です。ありがとうございました。 – JLRishe

関連する問題