Элементы управления Windows Forms в ScrollableControl и событиях - PullRequest
0 голосов
/ 26 мая 2009

Я заметил, что событие Click или другое поведение элемента управления не всегда запускается при нажатии элемента управления, содержащегося в ScrollableControl (Panel и т. Д.).

Если элемент управления, по которому выполняется щелчок, не имеет фокуса и виден только частично, он прокручивается в поле зрения. Это то, чего я ожидаю, однако событие Click не срабатывает или не происходит другое управляющее поведение.

Если элемент управления уже имеет фокус и виден только частично, события запускаются.

Флажок - прокручивает в просмотр, проверенное состояние не меняется. CheckedListBox - прокручивает в просмотр, выбранный элемент не выбирается. TreeView - Прокручивает в просмотр, выбранный узел не выбирается. Кнопка - прокручивается в поле зрения, событие нажатия не вызывается.

Чтобы воспроизвести это, вы можете сделать следующее:

  1. Добавьте любой из вышеперечисленных элементов управления в Панель
  2. Добавление обработчика событий для Click, SelectedItemChanged и т. Д.
  3. Измените размер формы, чтобы на панели были видны полосы прокрутки
  4. Прокрутите панель, чтобы один из элементов управления был частично видимым
  5. Нажмите частично видимый элемент управления

Есть ли способ обеспечить запуск событий?

1 Ответ

0 голосов
/ 26 мая 2009

David

У меня это сработало.

Код в Form1.Designer.cs:

namespace WindowsFormsApplication1
{
    partial class Form1
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.panel1 = new System.Windows.Forms.Panel();
            this.textBox2 = new System.Windows.Forms.TextBox();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.panel1.SuspendLayout();
            this.SuspendLayout();
            // 
            // panel1
            // 
            this.panel1.AutoScroll = true;
            this.panel1.Controls.Add(this.textBox2);
            this.panel1.Controls.Add(this.textBox1);
            this.panel1.Location = new System.Drawing.Point(86, 75);
            this.panel1.Name = "panel1";
            this.panel1.Size = new System.Drawing.Size(176, 70);
            this.panel1.TabIndex = 0;
            // 
            // textBox2
            // 
            this.textBox2.Location = new System.Drawing.Point(109, 17);
            this.textBox2.Name = "textBox2";
            this.textBox2.Size = new System.Drawing.Size(100, 20);
            this.textBox2.TabIndex = 1;
            this.textBox2.Click += new System.EventHandler(this.textBox2_Click);
            // 
            // textBox1
            // 
            this.textBox1.Location = new System.Drawing.Point(3, 17);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(100, 20);
            this.textBox1.TabIndex = 0;
            this.textBox1.Click += new System.EventHandler(this.textBox1_Click);
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(493, 271);
            this.Controls.Add(this.panel1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.panel1.ResumeLayout(false);
            this.panel1.PerformLayout();
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.Panel panel1;
        private System.Windows.Forms.TextBox textBox2;
        private System.Windows.Forms.TextBox textBox1;
    }
}

Код в Form1.cs:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void textBox1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Click1");
        }

        private void textBox2_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Click2");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...