ListView失去焦點選中行不能高亮顯示的問題解決

方法一:

1.ListView的HideSelection屬性設置爲True。

2.ListView的Validated事件處理

      /// <summary>
        /// 失去焦點事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lvSeries_Validated(object sender, EventArgs e)
        {
            try
            {
                if (lvSeries.FocusedItem != null)
                {
                    lvSeries.FocusedItem.BackColor = SystemColors.Highlight;
                    lvSeries.FocusedItem.ForeColor = Color.White;
                    lvSeries.SelectedIndices.Add(lvSeries.FocusedItem.Index);
                }
            }
            catch (Exception eEx)
            {
                MessageBox.Show(eEx.Message);
            }
        }



3.ListView的ItemSelectionChanged事件處理

        /// <summary>
        /// 選擇變化事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lvSeries_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
        {
            try
            {
                e.Item.ForeColor = Color.Black;
                e.Item.BackColor = SystemColors.Window;

                if (lvSeries.FocusedItem != null)
                {
                    lvSeries.FocusedItem.Selected = true;
                }
            }
            catch (Exception eEx)
            {
                MessageBox.Show(eEx.Message);
            }
        }

方法二:只能單選行功能,並排除方法一中的不易發現的Bug

      this.listview1.Validated += new System.EventHandler(this.lvSeries_Validated);
          this.listview1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lvSeries_MouseDown);

        /// <summary>
        /// 失去焦點事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lvSeries_Validated(object sender, EventArgs e)
        {
            try
            {
                if (lvSeries.FocusedItem != null)
              {
                lvSeries.FocusedItem.BackColor = SystemColors.Highlight;
                lvSeries.FocusedItem.ForeColor = Color.White;
                 }         

             }
            catch (Exception eEx)
            {
                MessageBox.Show(eEx.Message);
            }
        }

        /// <summary>
        /// 重新選擇行事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lvSeries_MouseDown(object sender, MouseEventArgs e)
        {
            try
            {

               ListViewItem _curItem = this.lvSeries.GetItemAt(e.X, e.Y);
                 foreach (ListViewItem item in lvSeries.Items)
             {
                item.ForeColor = Color.Black;
                item.BackColor = Color.White;
            }
            if (_curItem != null && _curItem.Index > -1)
            {
                _curItem.BackColor = SystemColors.Highlight;
                _curItem.ForeColor = Color.White;
              }
            else
            {
                if (lvSeries.FocusedItem != null)
                {
                    lvSeries.FocusedItem.BackColor = SystemColors.Highlight;
                    lvSeries.FocusedItem.ForeColor = Color.White;
                 }
              }           

           }
            catch (Exception eEx)
            {
                MessageBox.Show(eEx.Message);
            }
        }

原文鏈接:ListView失去焦點選中行不能高亮顯示的問題解決

發佈了27 篇原創文章 · 獲贊 10 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章