鼠标按下事件仅触发一次 [英] Mouse down event fires only once

查看:116
本文介绍了鼠标按下事件仅触发一次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

鼠标向下事件在窗口应用程序中仅工作一次,应该每次都工作
我的代码如下所示,请帮助我...

Mouse down event Working only once in window application ,it should be worked each and every time
My codes are given below please help me...

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;
using DynamicForm.Resources;

using Infragistics.Win.UltraWinEditors;

namespace DynamicForm
{
    public partial class FormDesigner : Form
    {
        ControlTypes ControlToDraw { get; set; }
        List<control> ControlCollections = new List<control>();

        public FormDesigner()
        {
            InitializeComponent();
           
        }
       
        private void btnDrawTextBox_Click(object sender, EventArgs e)
        {
            ControlToDraw = DynamicForm.ControlTypes.TextField;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            ControlToDraw = ControlTypes.ComboBoxField;
        }

        private void ctrLabel_Click(object sender, EventArgs e)
        {
            ControlToDraw = DynamicForm.ControlTypes.LabelField;
        }

        private void ctrlCheckBox_Click(object sender, EventArgs e)
        {
            ControlToDraw = DynamicForm.ControlTypes.CheckField;
        }

        private void ctrlOptionBox_Click(object sender, EventArgs e)
        {
            ControlToDraw = DynamicForm.ControlTypes.OptionField;
        }

        private void ctrlButton_Click(object sender, EventArgs e)
        {
            ControlToDraw = DynamicForm.ControlTypes.ButtonField;
        }

        private void FormDesigner_Click(object sender, EventArgs e)
        {
            if (this.PointToClient(MousePosition).Y < 130) return;

            switch (ControlToDraw)
            {
                case ControlTypes.None:
                    break;
                case ControlTypes.TextBox:
                    TextBox textBox = new TextBox();
                    textBox.Location = this.PointToClient(MousePosition);
                    textBox.Size = new Size(100, 24);
                    textBox.MouseDown += DynamicControl_MouseDown;
                    textBox.MouseUp += DynamicControl_MouseDown;
                    this.Controls.Add(textBox);
                    dragControl1.SelectedControl = textBox;
                    break;
                case ControlTypes.TextField:
                    TextField textField = new TextField();
                    textField.Location = this.PointToClient(MousePosition);
                    textField.MouseDown += DynamicControl_MouseDown;
                    textField.MouseUp += DynamicControl_MouseUp;

                    //test
                    //UltraTextEditor xx = (UltraTextEditor)textField.Controls[0];                   
                    //xx.MouseDown += textBox_MouseDown;
                    //xx.MouseUp += textBox_MouseUp;
                    //testend

                    this.Controls.Add(textField);
                    dragControl1.SelectedControl = textField;
                    if (ControlCollections.Count() == 0)
                    {
                        textField.FieldName = "Text Field " + 0;
                        this.Controls.Add(textField);
                        dragControl1.SelectedControl = textField;
                    }
                    else
                    {
                        textField.FieldName = "Text Field " + int.Parse(ControlCollections.Count().ToString());
                        this.Controls.Add(textField);
                        dragControl1.SelectedControl = textField;
                    }
                    ControlCollections.Add(dragControl1.SelectedControl);
                    break;
                case ControlTypes.ComboBoxField:
                    ComboBox comboBox = new ComboBox();
                    comboBox.Location = this.PointToClient(MousePosition);
                    comboBox.Size = new Size(100, 24);
                    comboBox.MouseDown += DynamicControl_MouseDown;
                    comboBox.MouseUp += DynamicControl_MouseDown;
                    this.Controls.Add(comboBox);
                    dragControl1.SelectedControl = comboBox;
                    break;

                case ControlTypes.LabelField:
                    LabelField label = new LabelField();
                    label.Location = this.PointToClient(MousePosition);
                    //label.Size = new Size(100, 24);
                    label.MouseDown += DynamicControl_MouseDown;
                    label.MouseUp += DynamicControl_MouseDown;
                    this.Controls.Add(label);
                    dragControl1.SelectedControl = label;
                    break;

                case ControlTypes.CheckField:
                    CheckField check = new CheckField();
                    check.Location = this.PointToClient(MousePosition);
                    //check.Size = new Size(100, 24);
                    check.MouseDown += DynamicControl_MouseDown;
                    check.MouseUp += DynamicControl_MouseDown;
                    this.Controls.Add(check);
                    dragControl1.SelectedControl = check;
                    break;

                case ControlTypes.OptionField:
                    OptionField option = new OptionField();
                    option.Location = this.PointToClient(MousePosition);
                    //option.Size = new Size(100, 24);
                    option.MouseDown += DynamicControl_MouseDown;
                    option.MouseUp += DynamicControl_MouseDown;
                    this.Controls.Add(option);
                    dragControl1.SelectedControl = option;
                    break;

                case ControlTypes.ButtonField:
                    ButtonField button = new ButtonField();
                    button.Location = this.PointToClient(MousePosition);
                    //button.Size = new Size(100, 24);
                    button.MouseDown += DynamicControl_MouseDown;
                    button.MouseUp += DynamicControl_MouseDown;
                    this.Controls.Add(button);
                    dragControl1.SelectedControl = button;
                    break;


                default:
                    break;
            }
            ControlToDraw = ControlTypes.None;
            dragControl1.DesignMode(true);
        }


private void DynamicControl_MouseDown(object sender, EventArgs e)
{
    for (int i = 0; i < ControlCollections.Count(); i++)
    {
        if (ControlCollections[i] == dragControl1.SelectedControl)
        {
            ControlCollections[i].BackColor = ColorTranslator.FromHtml("#C3C3C3");
        }
        else
        {
            ControlCollections[i].BackColor = ColorTranslator.FromHtml("#F0F0F0");
        }

    }
    switch (dragControl1.SelectedControl.GetType().Name)
    {

        case "TextBox":
            TextBox textBox = ((TextBox)dragControl1.SelectedControl);
            txtWidth.Text = textBox.Width.ToString();
            txtLeft.Text = textBox.Left.ToString();
            txtTop.Text = (textBox.Top - 130).ToString();
            break;

        case "TextField":
            TextField textField = ((TextField)dragControl1.SelectedControl);
            txtWidth.Text = textField.Width.ToString();
            txtLeft.Text = textField.Left.ToString();
            txtTop.Text = (textField.Top - 130).ToString();

            break;

        case "ComboBoxField":
            ComboBoxField comboBox = ((ComboBoxField)dragControl1.SelectedControl);
            txtWidth.Text = comboBox.Width.ToString();
            txtLeft.Text = comboBox.Left.ToString();
            txtTop.Text = (comboBox.Top - 130).ToString();
            break;

        case "LabelField":
            LabelField label = ((LabelField)dragControl1.SelectedControl);
            txtWidth.Text = label.Width.ToString();
            txtLeft.Text = label.Left.ToString();
            txtTop.Text = (label.Top - 130).ToString();
            break;

        case "CheckField":
            CheckField check = ((CheckField)dragControl1.SelectedControl);
            txtWidth.Text = check.Width.ToString();
            txtLeft.Text = check.Left.ToString();
            txtTop.Text = (check.Top - 130).ToString();
            break;

        case "OptionField":
            OptionField option = ((OptionField)dragControl1.SelectedControl);
            txtWidth.Text = option.Width.ToString();
            txtLeft.Text = option.Left.ToString();
            txtTop.Text = (option.Top - 130).ToString();
            break;

        case "ButtonField":
            ButtonField button = ((ButtonField)dragControl1.SelectedControl);
            txtWidth.Text = button.Width.ToString();
            txtLeft.Text = button.Left.ToString();
            txtTop.Text = (button.Top - 130).ToString();
            break;

        default:
            break;
    }
}



       private void DynamicControl_MouseUp(object sender, EventArgs e)
        {
            FormDesigner zz = new FormDesigner();
            int item = zz.Size.Width;
            if (dragControl1.SelectedControl != null)
            {
                if (dragControl1.SelectedControl.Left < 10)
                    dragControl1.SelectedControl.Left = 10;
                if (dragControl1.SelectedControl.Top < 130)
                    dragControl1.SelectedControl.Top = 140;
                if (dragControl1.SelectedControl.Left > item)
                    dragControl1.SelectedControl.Left = item - 20;
                //if (dragControl1.SelectedControl.Right >800)
                //    dragControl1.SelectedControl.Right = 600;


                for (int i = 0; i < ControlCollections.Count(); i++)
                {
                    if (ControlCollections[i] == dragControl1.SelectedControl)
                    {
                        ControlCollections[i].BackColor = ColorTranslator.FromHtml("#C3C3C3");
                    }
                    else
                    {
                        ControlCollections[i].BackColor = ColorTranslator.FromHtml("#F0F0F0");
                    }

                }

                switch (dragControl1.SelectedControl.GetType().Name)
                {
                    case "TextBox":
                        TextBox textBox = ((TextBox)dragControl1.SelectedControl);
                        txtWidth.Text = textBox.Width.ToString();
                        txtLeft.Text = textBox.Left.ToString();
                        txtTop.Text = (textBox.Top - 130).ToString();
                        break;

                    case "TextField":
                        TextField textField = ((TextField)dragControl1.SelectedControl);
                        txtWidth.Text = textField.Width.ToString();
                        txtLeft.Text = textField.Left.ToString();
                        txtTop.Text = (textField.Top - 130).ToString();
                        break;

                    case "ComboBoxField":
                        ComboBoxField comboBox = ((ComboBoxField)dragControl1.SelectedControl);
                        txtWidth.Text = comboBox.Width.ToString();
                        txtLeft.Text = comboBox.Left.ToString();
                        txtTop.Text = (comboBox.Top - 130).ToString();
                        break;

                    case "LabelField":
                        LabelField label = ((LabelField)dragControl1.SelectedControl);
                        txtWidth.Text = label.Width.ToString();
                        txtLeft.Text = label.Left.ToString();
                        txtTop.Text = (label.Top - 130).ToString();
                        break;

                    case "CheckField":
                        CheckField check = ((CheckField)dragControl1.SelectedControl);
                        txtWidth.Text = check.Width.ToString();
                        txtLeft.Text = check.Left.ToString();
                        txtTop.Text = (check.Top - 130).ToString();
                        break;

                    case "OptionField":
                        OptionField option = ((OptionField)dragControl1.SelectedControl);
                        txtWidth.Text = option.Width.ToString();
                        txtLeft.Text = option.Left.ToString();
                        txtTop.Text = (option.Top - 130).ToString();
                        break;

                    case "ButtonField":
                        ButtonField button = ((ButtonField)dragControl1.SelectedControl);
                        txtWidth.Text = button.Width.ToString();
                        txtLeft.Text = button.Left.ToString();
                        txtTop.Text = (button.Top - 130).ToString();
                        break;

                    default:
                        break;
                }
            }
        }

        private void panel1_MouseEnter(object sender, EventArgs e)
        {
            dragControl1.DesignMode(false);
        }

        private void panel1_MouseLeave(object sender, EventArgs e)
        {
            dragControl1.DesignMode(true);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            switch (dragControl1.SelectedControl.GetType().Name)
            {
                case "TextBox":
                    TextBox textBox = ((TextBox)dragControl1.SelectedControl);
                    textBox.Width = Convert.ToInt32(txtWidth.Text);
                    textBox.Left = Convert.ToInt32(txtLeft.Text);
                    textBox.Top = Convert.ToInt32(txtTop.Text) + 130;
                    break;
                case "ComboBox":
                    ComboBox comboBox = ((ComboBox)dragControl1.SelectedControl);
                    comboBox.Width = Convert.ToInt32(txtWidth.Text);
                    comboBox.Left = Convert.ToInt32(txtLeft.Text);
                    comboBox.Top = Convert.ToInt32(txtTop.Text) + 130;
                    break;
                default:
                    break;
            }
        }

        private void FormDesigner_Load(object sender, EventArgs e)
        {
            //Dragmethod(sender, e, "down");
            //textBox.MouseDown += new MouseEventHandler(textBox_MouseDown);
            //this.Controls.Contains(textBox);
        }

        private void txtCaption_TextChanged(object sender, EventArgs e)
        {

            switch (dragControl1.SelectedControl.GetType().Name)
            {

                case "LabelField":
                    ((LabelField)dragControl1.SelectedControl).FieldTitle = txtCaption.Text;
                    break;

                case "CheckField":
                    ((CheckField)dragControl1.SelectedControl).FieldTitle = txtCaption.Text;
                    break;

                case "ButtonField":
                    ((ButtonField)dragControl1.SelectedControl).FieldTitle = txtCaption.Text;
                    break;

                case "OptionField":
                    ((OptionField)dragControl1.SelectedControl).DisplayText = txtCaption.Text;
                    break;

                default:
                    break;
            }
        }

        private void txtLeft_TextChanged(object sender, EventArgs e)
        {
            try
            {
                dragControl1.SelectedControl.Left = Convert.ToInt32(txtLeft.Text);
            }
            catch { }
        }

        private void txtTop_TextChanged(object sender, EventArgs e)
        {
            try
            {
                dragControl1.SelectedControl.Top = Convert.ToInt32(txtTop.Text) + 130;
            }
            catch { }
        }

        private void txtWidth_TextChanged(object sender, EventArgs e)
        {
            try
            {
                dragControl1.SelectedControl.Width = Convert.ToInt32(txtWidth.Text);
            }
            catch { }
        }

        private void txtTop_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Up)
                txtTop.Text = (Convert.ToInt32(txtTop.Text) + 1).ToString();
            if (e.KeyCode == Keys.Down)
            {
                if (txtTop.Text == "0") return;
                txtTop.Text = (Convert.ToInt32(txtTop.Text) - 1).ToString();
            }
        }

        private void txtName_ValueChanged(object sender, EventArgs e)
        {
            switch (dragControl1.SelectedControl.GetType().Name)
            {
                case "TextField":
                    ((TextField)dragControl1.SelectedControl).FieldName = txtName.Text;
                    break;
                case "LabelField":
                    ((LabelField)dragControl1.SelectedControl).FieldName = txtName.Text;
                    break;
                case "CheckField":
                    ((CheckField)dragControl1.SelectedControl).FieldName = txtName.Text;
                    break;
                case "OptionField":
                    ((OptionField)dragControl1.SelectedControl).FieldName = txtName.Text;
                    break;
                case "ButtonField":
                    ((ButtonField)dragControl1.SelectedControl).FieldName = txtName.Text;
                    break;
                default:
                    break;

            }
        }

        public IEnumerable<control> GetAll(Control control, Type type)
        {
            var controls = control.Controls.Cast<control>();

            return controls.SelectMany(ctrl => GetAll(ctrl, type))
                                      .Concat(controls)
                                      .Where(c => c.GetType() == type);
        }

        public IEnumerable<control> GetAllControls(DragControl control)
        {
            var controls = control.Controls.Cast<dragcontrol>();

            return controls.SelectMany(ctrl => GetAllControls(ctrl)
                                      .Concat(controls));
        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            var collect = GetAll(this, dragControl1.SelectedControl.GetType());
            foreach (var item in collect)
            {
                if (dragControl1.SelectedControl == item)
                {
                    this.Controls.Remove(item);
                    ControlCollections.Remove(item);
                }
            }
        }

        #region test

        private static void Dragmethod(object sender, MouseEventArgs e, string str)
        {
            new DragControl(sender, e, str);
        }
        
        void textBox_MouseMove(object sender, MouseEventArgs e)
        {
            Dragmethod(sender, e, "move");
        }       

        void textBox_MouseUp(object sender, MouseEventArgs e)
        {
            Dragmethod(sender, e, "up");
        }

        void textBox_MouseDown(object sender, MouseEventArgs e)
        {
            Dragmethod(sender, e, "down");
            //((UltraTextEditor)(sender)).MouseDown += textBox_MouseDown;
        }  

        #endregion test
    }

    public enum ControlTypes
    {
        None,
        TextBox,
        TextField,
        ComboBoxField,
        LabelField,
        CheckField,
        OptionField,
        ButtonField
    }
}

推荐答案

Insetad在集合中循环,请使用sender对象.

Insetad looping through the collection, use sender object.

Control ctr = (control)sender;
ctr.BackColor = ...



有关更多信息,请参见以下内容:
处理和引发事件 [如何:在不使用Control.Name属性的情况下确定事件的发件人 [ ^ ]
Control.BackColor属性 [



For further information see these:
Handling and Raising Events[^]
HOW TO: Determine the Sender of an Event Without Using the Control.Name Property[^]
Control.BackColor Property[^]


这篇关于鼠标按下事件仅触发一次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆