Я разрабатываю приложение для форм Windows. Создание пользовательского интерфейса для некоторой службы. Что происходит, когда я создал приложение, есть несколько кнопок, на которых один клик должен работать, чтобы получить и установить значение, но после завершения кода все эти кнопки реагируют двойным щелчком. , когда мы применяем некоторую точку останова и тест, значения получают и устанавливают только одним кликом, но во время выполнения требуется двойной щелчок. Может ли кто-нибудь помочь?C#. Как избежать двойного щелчка, когда мне нужен один клик
ответ
Я получил решение, написав фрагмент кода. Просто нажмите кнопку при первом нажатии.
bool firstClick = true; {if (firstClick) {button.select(); // Активация кнопки}}
Спасибо всем за ваши ответы.
Полный текст Article от MSDN о том, как использовать только один клик, только дважды щелкните его. Кроме того, в нем указано, как вы можете обрабатывать события и различать один клик и двойной щелчок.
В этой статье используются булевы и таймеры. Возможно, вам понадобится использовать Dictionary<Button, boolean>
, если у вас несколько кнопок. Надеюсь, поможет.
Вот пример, если связь есть или вынута для некоторого reaosn:
Обрабатывать событие MouseDown и определить местоположение и промежуток времени между щелчками, используя соответствующие свойства о системе и качестве компонента Timer. Выполните соответствующее действие в зависимости от того, имеет ли значение щелчок или двойной щелчок. Следующий пример кода демонстрирует, как это можно сделать.
class Form1 : Form
{
private Rectangle hitTestRectangle = new Rectangle();
private Rectangle doubleClickRectangle = new Rectangle();
private TextBox textBox1 = new TextBox();
private Timer doubleClickTimer = new Timer();
private ProgressBar doubleClickBar = new ProgressBar();
private Label label1 = new Label();
private Label label2 = new Label();
private bool isFirstClick = true;
private bool isDoubleClick = false;
private int milliseconds = 0;
[STAThread]
public static void Main()
{
Application.EnableVisualStyles();
Application.Run(new Form1());
}
public Form1()
{
label1.Location = new Point(30, 5);
label1.Size = new Size(100, 15);
label1.Text = "Hit test rectangle:";
label2.Location = new Point(30, 70);
label2.Size = new Size(100, 15);
label2.Text = "Double click timer:";
hitTestRectangle.Location = new Point(30, 20);
hitTestRectangle.Size = new Size(100, 40);
doubleClickTimer.Interval = 100;
doubleClickTimer.Tick +=
new EventHandler(doubleClickTimer_Tick);
doubleClickBar.Location = new Point(30, 85);
doubleClickBar.Minimum = 0;
doubleClickBar.Maximum = SystemInformation.DoubleClickTime;
textBox1.Location = new Point(30, 120);
textBox1.Size = new Size(200, 100);
textBox1.AutoSize = false;
textBox1.Multiline = true;
this.Paint += new PaintEventHandler(Form1_Paint);
this.MouseDown += new MouseEventHandler(Form1_MouseDown);
this.Controls.AddRange(new Control[] { doubleClickBar, textBox1,
label1, label2 });
}
// Detect a valid single click or double click.
void Form1_MouseDown(object sender, MouseEventArgs e)
{
// Verify that the mouse click is in the main hit
// test rectangle.
if (!hitTestRectangle.Contains(e.Location))
{
return;
}
// This is the first mouse click.
if (isFirstClick)
{
isFirstClick = false;
// Determine the location and size of the double click
// rectangle area to draw around the cursor point.
doubleClickRectangle = new Rectangle(
e.X - (SystemInformation.DoubleClickSize.Width/2),
e.Y - (SystemInformation.DoubleClickSize.Height/2),
SystemInformation.DoubleClickSize.Width,
SystemInformation.DoubleClickSize.Height);
Invalidate();
// Start the double click timer.
doubleClickTimer.Start();
}
// This is the second mouse click.
else
{
// Verify that the mouse click is within the double click
// rectangle and is within the system-defined double
// click period.
if (doubleClickRectangle.Contains(e.Location) &&
milliseconds < SystemInformation.DoubleClickTime)
{
isDoubleClick = true;
}
}
}
void doubleClickTimer_Tick(object sender, EventArgs e)
{
milliseconds += 100;
doubleClickBar.Increment(100);
// The timer has reached the double click time limit.
if (milliseconds >= SystemInformation.DoubleClickTime)
{
doubleClickTimer.Stop();
if (isDoubleClick)
{
textBox1.AppendText("Perform double click action");
textBox1.AppendText(Environment.NewLine);
}
else
{
textBox1.AppendText("Perform single click action");
textBox1.AppendText(Environment.NewLine);
}
// Allow the MouseDown event handler to process clicks again.
isFirstClick = true;
isDoubleClick = false;
milliseconds = 0;
doubleClickBar.Value = 0;
}
}
// Paint the hit test and double click rectangles.
void Form1_Paint(object sender, PaintEventArgs e)
{
// Draw the border of the main hit test rectangle.
e.Graphics.DrawRectangle(Pens.Black, hitTestRectangle);
// Fill in the double click rectangle.
e.Graphics.FillRectangle(Brushes.Blue, doubleClickRectangle);
}
}
Вы можете просто определить одну кнопку и дважды с помощью таймера. Вот пример
class Form1 : Form
{
Timer timer;
public Form1()
{
InitializeComponent();
timer = new Timer();
timer.Interval = 500;
timer.Tick += new EventHandler(Timer_Tick);
}
private void App_MouseDown(object sender, MouseEventArgs e)
{
if (e.Clicks == 1)
{
timer.Start();
}
else
{
timer.Stop();
doubleClick();
}
}
private void Timer_Tick(object sender, EventArgs e)
{
timer.Stop();
singleClick();
}
//Single click
public void singleClick()
{
MessageBox.Show("Single Click.");
}
//Double click
public void doubleClick()
{
MessageBox.Show("Double Click.");
}
}
Еще одна вещь. Я не уверен, что он работает только с двойным щелчком. нравится, если мы нажмем один раз и потратим некоторое время на 2 секунды и снова нажмем, а затем и его забрать. Похоже, загрузка формы может быть проблемой. Спасибо за решение, я попробую. но по-прежнему учитывать этот комментарий. – AutoEng
- 1. Как избежать непрерывного двойного щелчка?
- 2. Как избежать двойного щелчка по кнопке в XAML/Mvvm/C#
- 3. ASP.NET linkbutton избежать двойного щелчка в iOS
- 4. Как отличить двойной клик и один клик мыши от wxpython
- 5. jquery ajax - событие двойного щелчка
- 6. Как избежать двойного щелчка по маркеру на карте Google?
- 7. Как перенаправить событие click для двойного щелчка?
- 8. Как избежать динамического выделения, когда мне нужен полиморфизм?
- 9. Ajax CSS bugg. Как избежать двойного щелчка, чтобы применить css?
- 10. Как избежать двойного удаления переменных в C++?
- 11. Как переназначить кнопку двойного щелчка в autohotkey
- 12. Мне нужен один эффект jQuery
- 13. Когда мне нужен анонимный класс в C++?
- 14. Как избежать двойного подсчета
- 15. Кнопка события двойного щелчка
- 16. Поведение двойного щелчка Strange Flex
- 17. Как избежать двойного удаления?
- 18. Форма не работает без двойного щелчка
- 19. Android onOptionsItemВыбранный избегать двойного щелчка
- 20. Когда мне не нужен typedef?
- 21. Функция двойного щелчка изображения
- 22. Отключить HTML-кнопку после нажатия, чтобы избежать двойного щелчка
- 23. Хранение первого двойного щелчка
- 24. Youtube видео двойного щелчка
- 25. C# datagridview событие двойного щелчка wont trigger
- 26. Событие двойного щелчка TreeView
- 27. C# Мне нужен Socket.Close()?
- 28. Как избежать «двойного события», когда ЭТИКЕТКИ защелкиваются внутри элемента с событием щелчка
- 29. Кодирование события двойного щелчка в C#
- 30. Событие двойного щелчка CMFCStatusBar
Не могли бы вы включить пример кода, который так реагирует? –
Извините, но включает в себя весь код. Когда я закончил этот код, он начал реагировать двойным щелчком. Я получаю и устанавливаю значение на шине CAN. первоначально, когда мы должны получить и установить значение сигнала, и когда значение было двойного типа, все пошло правильно. Но когда тип значения изменился на тип объекта, он начал рецензировать с двойным щелчком. – AutoEng
Некоторые фрагменты могут говорить больше, чем ваши слова. и это будет более понятным для нас –