2017-11-23 8 views
2

2列のリストビューLabelEdit = trueがあります。今、私は編集が最初の列のために有効にF2キーを押すたびに以下のコードはKeyDownイベント特定の列のC#ListView LabelEdit

  if (e.KeyData == Keys.F2 && lvwColumns.SelectedItems.Count > 0) 
      { 
       lvwColumns.SelectedItems[0].BeginEdit(); 
       return; 
      } 

で書かれています。代わりにSECOND列で編集することはできますか?

+0

このWPFまたはWinformsはありますか? – mjwills

+0

これはwinformsです。編集されました! –

答えて

1

私はlistViewSubItemはUIから編集できないと思います。想像力を使って、編集したいセルにtextBoxを置くことができます

TextBox txtBox1 = new TextBox(); 
    private int subItemIndex = 0; 
    private ListViewItem viewItem; 

    private int? xpos = null; 
    private void listView_Click(object sender, EventArgs e) 
    { 
     xpos = MousePosition.X - listView.PointToScreen(Point.Empty).X; 
    } 

    public MainForm() 
    { 
     InitializeComponent(); 
     listView.Controls.Add(txtBox1); 
     txtBox1.Visible = false; 
     txtBox1.KeyPress += (sender, args) => 
     { 
      TextBox textBox = sender as TextBox; 

      if ((int)args.KeyChar == 13) 
      { 
       if (viewItem != null) 
       { 
        viewItem.SubItems[subItemIndex].Text = textBox.Text; 
       } 
       textBox.Visible = false; 
      } 
     }; 
    } 

     private void listView_KeyDown(object sender, KeyEventArgs e) 
     { 
      if (e.KeyData == Keys.F2 && listView.SelectedItems.Count > 0) 
      { 
       viewItem = listView.SelectedItems[0]; 
       var bounds = viewItem.Bounds; 
       var col2_bounds = viewItem.SubItems[1].Bounds; 
       var col1_bounds = viewItem.SubItems[0].Bounds; 
       col1_bounds.Width -= col2_bounds.Width; 


       if (xpos > col2_bounds.X) 
       { 
        subItemIndex = 1; 
        txtBox1.SetBounds(col2_bounds.X, bounds.Y, col2_bounds.Width, bounds.Height); 
       } 
       else 
       { 
        subItemIndex = 0; 
        txtBox1.SetBounds(col1_bounds.X, bounds.Y, col1_bounds.Width, bounds.Height); 
       } 
       txtBox1.Text = string.Empty; 
       txtBox1.Visible = true; 
      } 
     } 
関連する問題