2017-12-01 14 views
0

私はWinFormsでdatagridviewを作成しています。 datagridview内の各セルは、テキストボックスセルまたはdatagridviewイメージセルです。私はcellMouseDownEent(オブジェクト送信者、DataGridViewCellMouseEventArgs e)を発射しています。摘出されたセルが画像セルであればタスク1を実行し、テキストボックスセルであればタスク2を実行する。現在のセルがイメージセルであるかテキストボックスセルであるかを調べる方法はわかりません。私は、画像セルのタグプロパティを0に、テキストボックスセルを1に設定して、クリックされたものを特定しましたが、運がありません。どんなアドバイスも評価されていません。クリックされたセルの種類を知ることがタグのプロパティdatagridview C#

おかげで、

I'm adding my code here: 
Ignore if a column or row header is clicked 
       if (e.RowIndex != -1 && e.ColumnIndex != -1) 
       { 
        if (e.Button == MouseButtons.Right) 
        { 
         DataGridViewCell clickedCell = (sender as DataGridView).Rows[e.RowIndex].Cells[e.ColumnIndex]; 

         // Here you can do whatever you want with the cell 
         this.dgvAddFilters.CurrentCell = clickedCell; // Select the clicked cell, for instance 


         // Get mouse position relative to the vehicles grid 
         var relativeMousePosition = dgvAddFilters.PointToClient(Cursor.Position); 
         if (clickedCell.Tag.ToString()==null) 
         { 
          return; 
         } 
         else if (imageCell == null) return; 
         else if (e.ColumnIndex == 0 && e.RowIndex == 0) 
         { 
          if ((dgvAddFilters[e.ColumnIndex, e.RowIndex + 2].Value == null)) 
          // (dgvAddFilters[e.ColumnIndex + 2, e.RowIndex].Value == null)) 
          { 
           dgvAddFilters.ContextMenuStrip = contMenuOr; 
           this.contMenuOr.Show(dgvAddFilters, relativeMousePosition); 
          } 
          else return; 
         } 
         else if ((e.ColumnIndex == 0) 
          && (e.RowIndex > 0) 
          && (dgvAddFilters[e.ColumnIndex + 2, e.RowIndex].Value == null) 
          && (dgvAddFilters[e.ColumnIndex, e.RowIndex + 2].Value == null) 
          && (dgvAddFilters[e.ColumnIndex, e.RowIndex].Value != null)) 
         { 
          dgvAddFilters.ContextMenuStrip = contMenuFilterMenu; 
          this.contMenuFilterMenu.Show(dgvAddFilters, relativeMousePosition); 
         } 
         else if ((e.ColumnIndex == 0) 
          && (e.RowIndex > 0) 
          && (dgvAddFilters[e.ColumnIndex, e.RowIndex + 2].Value == null) 
          && (dgvAddFilters[e.ColumnIndex + 2, e.RowIndex].Value != null) 
          && (dgvAddFilters[e.ColumnIndex, e.RowIndex].Value != null)) 
         { 
          dgvAddFilters.ContextMenuStrip = contMenuOrEditDelete; 
          this.contMenuOrEditDelete.Show(dgvAddFilters, relativeMousePosition); 
         } 
         else if ((e.ColumnIndex == 0) 
          && (e.RowIndex > 0) 
          && (dgvAddFilters[e.ColumnIndex + 2, e.RowIndex].Value == null) 
          && (dgvAddFilters[e.ColumnIndex, e.RowIndex + 2].Value != null) 
          && (dgvAddFilters[e.ColumnIndex, e.RowIndex].Value != null)) 
         { 
          dgvAddFilters.ContextMenuStrip = contMenuAndDeleteEditMenu; 
          this.contMenuAndDeleteEditMenu.Show(dgvAddFilters, relativeMousePosition); 
         } 
         else if ((dgvAddFilters[e.ColumnIndex, (e.RowIndex + 2)] != null) 
          && (dgvAddFilters[(e.ColumnIndex + 2), e.RowIndex].Value != null) 
          && (dgvAddFilters[e.ColumnIndex, e.RowIndex].Value != null)) 
         { 
          dgvAddFilters.ContextMenuStrip = contmenuDeletEdit; 
          this.contmenuDeletEdit.Show(dgvAddFilters, relativeMousePosition); 
         } 
         else if ((dgvAddFilters[e.ColumnIndex, (e.RowIndex + 2)] != null) 
          && (dgvAddFilters[e.ColumnIndex, e.RowIndex].Value != null)) 
         { 
          dgvAddFilters.ContextMenuStrip = contMenuAndDeleteEditMenu; 
          this.contMenuAndDeleteEditMenu.Show(dgvAddFilters, relativeMousePosition); 
         } 
         else 
         { 
          return; 
        } 
+0

であるかどうかをあなたが使用しようとしているコードを表示する方法を見つけるために届きませんか?あなたが現在行っていることがわかると助けが簡単です –

+0

私の助言は[ask]を読んで[tour]を取ることです。各列は異なるタイプになりますので、タグ(または運)の必要はありません – Plutonix

+0

@ Plutonix - うまくいくまで運が必要です:) – rash

答えて

1

は、あなたはそれが役に立つかどうかを確認してください....行う方法の下に試すことができます。

クリックしたセルを取得し、そのタイプを確認します。

以下は、チェックボックスタイプのセルをチェックする例です。

private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) 
{ 
     Type type = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].GetType(); 

     if (type.Name == "DataGridViewCheckBoxCell") 
     { 
     string value = (string)dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; 
     } 
} 
0

これは役に立ちますか?

using System.ComponentModel; 
using System.Windows.Forms; 

namespace DGVCellTypes_47599159 
{ 
    public partial class Form1 : Form 
    { 

     DataGridView dgv = new DataGridView(); 
     BindingList<dgventry> dgventries = new BindingList<dgventry>(); 
     public Form1() 
     { 
      InitializeComponent(); 
      InitOurStuff(); 
     } 

     private void InitOurStuff() 
     { 
      this.Controls.Add(dgv); 
      dgv.Dock = DockStyle.Top; 
      dgv.DataSource = dgventries; 
      dgv.CellMouseDown += Dgv_CellMouseDown; 
      for (int i = 0; i < 10; i++) 
      { 
       dgventries.Add(new dgventry { col1 = $"col1_{i}", col2 = $"col2_{i}", col3 = (i % 2) > 0 }); 
      } 
     } 

     private void Dgv_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) 
     { 

      if (dgv.Rows[e.RowIndex].Cells[e.ColumnIndex] is DataGridViewCheckBoxCell) 
      { 
       //do something 
      } 
      else if (dgv.Rows[e.RowIndex].Cells[e.ColumnIndex] is DataGridViewTextBoxCell) 
      { 
       //do something 
      } 
      else if (dgv.Rows[e.RowIndex].Cells[e.ColumnIndex] is DataGridViewImageCell) 
      { 
       //do something 
      } 
      else 
      { 
       //do something 
      } 
     } 
    } 


    public class dgventry 
    { 
     public string col1 { get; set; } 
     public string col2 { get; set; } 
     public bool col3 { get; set; } 

    } 
} 

私は、現在のセルが画像セルまたはテキストボックスセル

 private void Dgv_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) 
     { 

      if (dgv.Rows[e.RowIndex].Cells[e.ColumnIndex] is DataGridViewCheckBoxCell) 
      { 
       //do something 
      } 
      else if (dgv.Rows[e.RowIndex].Cells[e.ColumnIndex] is DataGridViewTextBoxCell) 
      { 
       //do something 
      } 
      else if (dgv.Rows[e.RowIndex].Cells[e.ColumnIndex] is DataGridViewImageCell) 
      { 
       //do something 
      } 
      else 
      { 
       //do something 
      } 
     } 
+0

私はクリックされたセルの値を教えてくれるものが必要だと思います(クリックされたセルにイメージ、テキスト、またはヌルがある場合は意味します) – rash

+0

@rash dataGridView1.Rows [e.RowIndex] .Cells [e.ColumnIndex] 。値はあなたに価値を与えるでしょう – Naidu

+0

はいそれは私に価値を与えます。しかし、イメージセルでは機能しません。 – rash