Прежде чем начать, я хочу уточнить, что ответ , предоставленный Гансом Пассантом , уже объясняет в точности то же самое, что и я.Так что, если вы сочтете это полезным, вам следует подтвердить его ответ.
Однако из обмена комментариями видно, что вы не совсем понимаете, что он пытается сказать.Возможно, я смогу немного лучше объяснить это, и, возможно, вам будет легче, если вы поймете, что происходит, если вы точно поняли, что вам нужно изменить в своем коде.
Давайте начнем с оценкитекущая ситуация: текстовое поле, являющееся частью userControl11
, правильно меняет цвет, когда пользователь начинает перетаскивать трекбар.Однако текстовое поле second , являющееся частью Form1
, не становится белым после завершения перетаскивания трекбара.
Ваш пользовательский элемент управления уже вызывает два пользовательских события StartDrag
и EndDrag
, с именами, которые явно указывают текущее состояние.В Form1
вы обрабатываете событие StartDrag
пользовательского элемента управления и меняете цвет второго текстового поля на красный.Но вместо обработки события EndDrag
для изменения цвета на белый, вы обрабатываете событие MouseUp
.Вот почему это не работает, и что ответ Ганса пытался вам сказать. Вместо этого код вашей формы должен выглядеть следующим образом:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.userControl11.EndDrag += new MyTrackbar.UserControl1.EndDragHandler(this.userControl11_EndDrag);
}
private void userControl11_StartDrag()
{
// Works
textBox1.BackColor = Color.Red;
}
private void userControl11_EndDrag()
{
// Now also works!
textBox1.BackColor = Color.White;
}
}
Вы уже понимаете, что вам нужно обработать пользовательское событие StartDrag
, которое вы подняли, поэтому оно кажется достаточно простымчто также необходимо обработать событие EndDrag
для достижения желаемого эффекта.
Но тогда вы можете спросить: «Почему событие MouseUp
работает внутрипользовательский контроль, но не работают внутри формы?!? "Я предполагаю, что это то, что вы пытаетесь утверждать, это ошибка в .NET Framework.(Подсказка: на гораздо меньше шансов, что кто-либо из нас обнаружит настоящую ошибку в Framework, чем один из нас смущен , почему мы наблюдаем поведение, которым мы являемся, илипросто упускает что-то очевидное.)
Причина в том, что внутри пользовательского элемента управления вы обрабатываете событие MouseUp
, вызванное элементом управления trackbar (trackBar1
). Но это событие не распространяется вверх. То, что элемент управления trackbar вызывает событие MouseUp
, не означает, что пользовательский элемент управления, содержащий его, вызывает то же событие.Похоже, вы уже знаете, что касается события MouseDown
, и это то же самое, что и событие MouseUp
.
Нет необходимости подавать отчет об ошибке в Microsoft и не нужно, чтобы кто-торанить их чувства.