Advertisement
tolikpunkoff

change PASTE behavior in user control

Aug 9th, 2021
2,227
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. protected override void WndProc(ref Message m)
  2. {
  3.     if (m.Msg == WM_PASTE) //перехватываем сообщение "вставка"
  4.     {
  5.         //получаем строку из буфера обмена
  6.         IDataObject obj = Clipboard.GetDataObject();
  7.         string input = (string)obj.GetData(typeof(string));
  8.         ulong tmpulong = 0;
  9.         long tmplong = 0;
  10.  
  11.         if ((!Fractional) && (!Negative)) //только цифры
  12.         {
  13.             //пытаемся конвертировать в беззнаковый long
  14.             if (!ulong.TryParse(input,out tmpulong))
  15.             {
  16.                 //не получилось
  17.                 m.Result = (IntPtr)0; //отменяем вставку
  18.                 return;
  19.             }
  20.         }
  21.        
  22.         //отрицательные и положительные целые
  23.         if ((!Fractional) && (Negative))
  24.         {
  25.             //пытаемся конвертировать в знаковый long
  26.             if (!long.TryParse(input,out tmplong))
  27.             {
  28.                 //не получилось
  29.                 m.Result = (IntPtr)0; //отменяем вставку
  30.                 return;
  31.             }
  32.         }
  33.  
  34.         //дробные
  35.         if ((Fractional))
  36.         {
  37.             //пытаемся конвертировать в double
  38.             if (!IsDouble(input))
  39.             {
  40.                 //не получилось
  41.                 m.Result = (IntPtr)0; //отменяем вставку
  42.                 return;
  43.             }
  44.            
  45.             //заменяем разделитель на установленный в контроле
  46.             input = input.Replace('.', separator);
  47.             input = input.Replace(',', separator);
  48.  
  49.             //добавляем лидирующий 0 если надо
  50.             if (input.StartsWith(separator.ToString()))
  51.             {
  52.                 input = input.Replace(separator.ToString(),
  53.                     "0" + separator.ToString());
  54.             }
  55.             if (input.StartsWith("-" + separator.ToString()))
  56.             {
  57.                 input = input.Replace("-" + separator.ToString(),
  58.                     "-0" + separator.ToString());
  59.             }
  60.  
  61.             //дробные не отрицательные
  62.             if (!Negative)
  63.             {
  64.                 if (input.StartsWith("-"))
  65.                 {
  66.                     m.Result = (IntPtr)0; //отменяем вставку
  67.                     return;
  68.                 }
  69.             }
  70.            
  71.             //меняем содержимое буфера обмена
  72.             Clipboard.SetText(input);
  73.         }
  74.  
  75.         //вставка чисел целиком
  76.         this.Text = string.Empty;
  77.     }
  78.  
  79.     base.WndProc(ref m);
  80. }
Advertisement
Advertisement
Advertisement
RAW Paste Data Copied
Advertisement