Paste Search Dynamic
Recent pastes
CSharp Listbox Disable Items
  1. using system;
  2. using system.Collections.Generic;
  3. using system.ComponentModel;
  4. using system.Data;
  5. using system.Drawing;
  6. using system.Linq;
  7. using system.Text;
  8. using system.Threading.Tasks;
  9. using system.Windows.Forms;
  10.  
  11. using system.Runtime.InteropServices;
  12.  
  13. namespace CSharp_Listbox_Disable_Items
  14. {
  15.     public partial class Form1 : Form
  16.     {
  17.         public Form1()
  18.         {
  19.             InitializeComponent();
  20.         }
  21.  
  22.         private CustomListBox customListBox2 = new CustomListBox();
  23.  
  24.         private void Form1_Load(object sender, EventArgs e)
  25.         {
  26.             InitializeListBox();
  27.         }
  28.  
  29.         public class ListItem
  30.         {
  31.             public string Name { get; set; }
  32.  
  33.             public override string ToString()
  34.             {
  35.                 return Name;
  36.             }
  37.         }
  38.  
  39.         const string runKey_ = "SOFTWARE\Microsoft\Windows\CurrentVersion\Run";
  40.         const string runKey_A = "SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce";
  41.         const string runKey_B = "SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices";
  42.         const string runKey_C = "SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce";
  43.         const string runKey_D = "Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit";
  44.  
  45.         const string runKey1_ = "SOFTWARE\Microsoft\Windows\CurrentVersion\Run";
  46.         const string runKey_AA = "SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce";
  47.         const string runKey_BB = "SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices";
  48.         const string runKey_CC = "SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce";
  49.         const string runKey_DD = "Software\Microsoft\Windows NT\CurrentVersion\Windows";
  50.  
  51.         private void InitializeListBox()
  52.         {
  53.             customListBox2.Items.AddRange(new object[]
  54.                 { "Item 1", "Item 2", "Item 3" });
  55.             customListBox2.Location = new system.Drawing.Point(81, 69);
  56.             customListBox2.Size = new system.Drawing.Size(120, 95);
  57.  
  58.             Controls.Add(customListBox2);
  59.             customListBox2.AddDisabledItem(1);
  60.  
  61.             customListBox1.Items.Add(new ListItem { Name = "LocalMachine" });
  62.             customListBox1.Items.Add(new ListItem { Name = "============" });
  63.             customListBox1.Items.Add(new ListItem { Name = runKey_ });
  64.             customListBox1.Items.Add(new ListItem { Name = runKey_A });
  65.             customListBox1.Items.Add(new ListItem { Name = runKey_B });
  66.             customListBox1.Items.Add(new ListItem { Name = runKey_C });
  67.             customListBox1.Items.Add(new ListItem { Name = runKey_D });
  68.  
  69.             customListBox1.Items.Add(new ListItem { Name = "" });
  70.  
  71.             customListBox1.Items.Add(new ListItem { Name = "CurrentUser" });
  72.             customListBox1.Items.Add(new ListItem { Name = "============" });
  73.             customListBox1.Items.Add(new ListItem { Name = runKey1_ });
  74.             customListBox1.Items.Add(new ListItem { Name = runKey_AA });
  75.             customListBox1.Items.Add(new ListItem { Name = runKey_BB });
  76.             customListBox1.Items.Add(new ListItem { Name = runKey_CC });
  77.             customListBox1.Items.Add(new ListItem { Name = runKey_DD });
  78.  
  79.             customListBox1.AddDisabledItem(0);
  80.             customListBox1.AddDisabledItem(1);
  81.  
  82.             customListBox1.AddDisabledItem(8);
  83.             customListBox1.AddDisabledItem(9);
  84.         }
  85.     }
  86.  
  87.     public class CustomListBox : system.Windows.Forms.ListBox
  88.     {
  89.         [DllImport("User32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
  90.         public static extern short GetKeyState(int nVirtKey);
  91.  
  92.         [DllImport("User32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
  93.         public static extern int SendMessage(IntPtr hWnd, uint msg, int wParam, IntPtr lParam);
  94.  
  95.         public const int LB_SETCURSEL = 0x0186;
  96.         public const int LBN_SELCHANGE = 1;
  97.  
  98.         public const int WM_REFLECT = 0x2000;
  99.         public const int WM_NOTIFY = 0x004E;
  100.         public const int WM_COMMAND = 0x0111;
  101.  
  102.         public static int HIWORD(int n)
  103.         {
  104.             return (n >> 16) & 0xffff;
  105.         }
  106.  
  107.         public static int LOWORD(int n)
  108.         {
  109.             return n & 0xffff;
  110.         }
  111.  
  112.         protected override void WndProc(ref Message m)
  113.         {
  114.             if (m.Msg == WM_REFLECT + WM_COMMAND)
  115.             {
  116.                 if (HIWORD((int)m.WParam) == LBN_SELCHANGE)
  117.                 {
  118.                     int nCurrentIndex = this.SelectedIndex;
  119.                     int nDisabledIndex = lstIndexes.FindIndex(x => x == nCurrentIndex);
  120.                     if (nDisabledIndex != -1)
  121.                     {
  122.                         SendMessage(this.Handle, LB_SETCURSEL, -1, IntPtr.Zero);
  123.                         bool bDown = (GetKeyState((int)Keys.Down) & 0x8000) == 0x8000;
  124.                         bool bUp = (GetKeyState((int)Keys.Up) & 0x8000) == 0x8000;
  125.                         bool bNext = (GetKeyState((int)Keys.Next) & 0x8000) == 0x8000;
  126.                         bool bPrior = (GetKeyState((int)Keys.Prior) & 0x8000) == 0x8000;
  127.                         if (bDown || bUp || bNext || bPrior)
  128.                         {
  129.                             while (nDisabledIndex != -1 && nCurrentIndex != -1)
  130.                             {
  131.                                 if (nCurrentIndex != -1)
  132.                                 {
  133.                                     nDisabledIndex = lstIndexes.FindIndex(x => x == nCurrentIndex);
  134.                                     if (nDisabledIndex == -1)
  135.                                     {
  136.                                         nCurrentIndex = SendMessage(this.Handle, LB_SETCURSEL, nCurrentIndex, IntPtr.Zero);
  137.                                         break;
  138.                                     }
  139.                                     else
  140.                                     {
  141.                                         if (bDown)
  142.                                             nCurrentIndex++;
  143.                                         else if (bUp)
  144.                                             nCurrentIndex--;
  145.                                         else if (bNext)
  146.                                             nCurrentIndex += 5;
  147.                                         else if (bPrior)
  148.                                             nCurrentIndex -= 5;
  149.                                     }
  150.                                 }
  151.                             }
  152.                         }
  153.                     }
  154.                 }
  155.             }
  156.             else
  157.                 base.WndProc(ref m);
  158.         }
  159.  
  160.         private List<int> lstIndexes = new List<int>();
  161.  
  162.         public CustomListBox()
  163.         {
  164.             this.DrawMode = DrawMode.OwnerDrawFixed;
  165.             this.DrawItem += new DrawItemEventHandler(ListBox1_DrawItem);    
  166.         }
  167.        
  168.         public void AddDisabledItem(int nItemIndex)
  169.         {
  170.             lstIndexes.Add(nItemIndex);
  171.         }
  172.  
  173.         private void ListBox1_DrawItem(object sender, system.Windows.Forms.DrawItemEventArgs e)
  174.         {
  175.             e.DrawBackground();
  176.             Brush myBrush = Brushes.Black;
  177.             int nIndex = lstIndexes.FindIndex(x => x == e.Index);          
  178.             if (nIndex != -1)
  179.                 myBrush = Brushes.LightGray;
  180.             if (this.Items.Count != 0 )
  181.                 e.Graphics.DrawString(this.Items[e.Index].ToString(), e.Font, myBrush, e.Bounds, StringFormat.GenericDefault);
  182.             if (nIndex == -1)
  183.                 e.DrawFocusRectangle();
  184.         }  
  185.     }
  186. }
Parsed in 0.039 seconds