pradeepradyumna
pradeepradyumna

Reputation: 1072

C# ListView LabelEdit on a particular column

I have a listview with 2 columns LabelEdit = true. Now I have the below code written in KeyDown event

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

Whenever I press F2 key the edit enables for the FIRST column. Is it possible to make edits in the SECOND column instead?

Upvotes: 4

Views: 1068

Answers (1)

Z.R.T.
Z.R.T.

Reputation: 1603

i think listViewSubItem is not editable from UI. You can use your imagination and put textBox over the cell you want edit

    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;
            }
        }

Upvotes: 3

Related Questions