Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 293
pradeepradyumna Avatar asked Sep 14 '25 15:09

pradeepradyumna


1 Answers

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;
            }
        }
like image 106
Z.R.T. Avatar answered Sep 16 '25 05:09

Z.R.T.