Avatar billede zeroaim Nybegynder
16. februar 2005 - 07:14 Der er 7 kommentarer og
1 løsning

Simuler button_Click grafisk

Hejsa

Jeg er klar over at der ikke er ret vigtigt det her, men jeg vil nu gerne vide det alligevel, bare sådan for et syns skyld.

Når man har indtastet noget i en textbox kan an endten trykke på en kanp eller trykke enter for at fortsætte. Det virker fint, meeeen,,, jeg ville jo gerne at det også rent grafisk så ud som om man trykkede på knappen, når man vælger at trykke enter i stedet for rent faktisk at bruge knappen.

Det har som sagt ingen betydning for afviklingen, men det skal jo se pænt ud (det er jo det de unge vil ha)
Avatar billede the_party_dog Nybegynder
16. februar 2005 - 08:09 #1
Jeg ville lave noget der minder om at flytte musen hen til den knap det drejer sig om, og få den til at lave et tryk. Jeg ville gemme dens XY kordinater, så jeg kunne flytte den tilbage igen, når klikket var fortaget....
Avatar billede zeroaim Nybegynder
16. februar 2005 - 09:26 #2
Det ku da måske være en løsning ja, men der må da være en mere elegant måde at lave det på hva'?
Avatar billede burningice Nybegynder
16. februar 2005 - 11:00 #3
du kan i din tekstbox KeyDown-event tjekke for >enter< knappen, og når den bliver trykket ned sende en WindowsMessage der får din knap til at blive trykket på.

Det kræver en handle til din knap og at du sender en WM_LBUTTONDOWN-message til den.

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Runtime;
using System.Reflection;
using System.Runtime.InteropServices;

namespace _591420
{
    /// <summary>
    /// Summary description for Form1.
    /// </summary>
    public class Form1 : System.Windows.Forms.Form
    {
        [DllImport("user32.dll", CharSet=CharSet.Auto, SetLastError=true)]
        public static extern bool SendMessage(
            IntPtr hWnd,
            uint Msg,
            IntPtr wParam,
            IntPtr lParam);

        const uint WM_LBUTTONDOWN = 0x201;

        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.TextBox textBox1;
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.Container components = null;

        public Form1()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();

            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (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.button1 = new System.Windows.Forms.Button();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.SuspendLayout();
            //
            // button1
            //
            this.button1.Location = new System.Drawing.Point(184, 40);
            this.button1.Name = "button1";
            this.button1.TabIndex = 0;
            this.button1.Text = "button1";
            this.button1.Click += new System.EventHandler(this.button1_Click);
            //
            // textBox1
            //
            this.textBox1.Location = new System.Drawing.Point(32, 48);
            this.textBox1.Name = "textBox1";
            this.textBox1.TabIndex = 1;
            this.textBox1.Text = "textBox1";
            this.textBox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBox1_KeyDown);
            //
            // Form1
            //
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(292, 273);
            this.Controls.Add(this.textBox1);
            this.Controls.Add(this.button1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);

        }
        #endregion

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.Run(new Form1());
        }

        private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            if (e.KeyCode == Keys.E)
            {
                IntPtr buttonHandle = button1.Handle;
                SendMessage(buttonHandle, WM_LBUTTONDOWN, new IntPtr(0x00000001), new IntPtr(0x000e002d));
            }
        }

        private void button1_Click(object sender, System.EventArgs e)
        {
            MessageBox.Show("hej");
        }
    }
}




PostMessage(hWndEffectsButton,BM_CLICK,0,0);
Avatar billede zeroaim Nybegynder
16. februar 2005 - 11:17 #4
Hej cyber

Ja sådan skal det sikkert gøres :-). Jeg tjekker det lige når jeg får tid.

Der er dog en ting jeg lige kan se her med det samme. Du bruger i textBox1_KeyDown udtrykket "e.KeyCode", det har jeg sjovt nok set dig bruge før herinde, men det er altså ikke noget jeg kan få til at virke. Jeg bruger i stedet "e.KeyChar==13" til at tjekke for enter ???
Avatar billede burningice Nybegynder
16. februar 2005 - 11:24 #5
KeyCode er bare en Enum af KeyChar, så man kan tilgå det med navne istedet for tal man alligevel ikke kan huske.

det her virker hos mig:

if (e.KeyCode == Keys.Enter)
            {
                IntPtr buttonHandle = button1.Handle;
                SendMessage(buttonHandle, WM_LBUTTONDOWN, new IntPtr(0x00000001), new IntPtr(0x000e002d));
            }

Det kan dog være at du på din form skal sørge for at din knap ikke er sat som AcceptButton
Avatar billede burningice Nybegynder
16. februar 2005 - 11:30 #6
der er en lille bug der gør at knappen bliver ved med at været trykket ned, dette løses ved at sende en LBUTTONUP-message også. For at gøre effekten tydeligere har jeg her ladet knappen været trykket ned i et sekund, men det kan bare ændres:

const uint WM_LBUTTONDOWN = 0x0201;
        const uint WM_LBUTTONUP = 0x0202;
        const uint WM_PAINT = 0x000F;

private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                IntPtr buttonHandle = button1.Handle;
                SendMessage(buttonHandle, WM_LBUTTONDOWN, new IntPtr(0x00000001), new IntPtr(0x000e002d));
                SendMessage(buttonHandle, WM_PAINT, IntPtr.Zero, IntPtr.Zero);
                System.Threading.Thread.Sleep(1000);
                SendMessage(buttonHandle, WM_LBUTTONUP, IntPtr.Zero, new IntPtr(0x00090030));
                SendMessage(buttonHandle, WM_PAINT, IntPtr.Zero, IntPtr.Zero);

                this.textBox1.Focus();
            }
        }
Avatar billede zeroaim Nybegynder
21. marts 2005 - 22:20 #7
Hej igen

Undskyld jeg har været væk så længe, men jeg har ikke haft tid overhovedet til at komme videre med det her.

Hvis du smider et svar cyberfessor, så får du lige point for din tålmodighed (og for dine indlæg selvfølgelig :-) )

Jeg vender tilbage med spørgsmålet igen, når jeg får tid til at kigge på det igen. Hvis altså jeg ikke kan få det du har skrevet til at virke.

Med venlig hilsen
Henrik
Avatar billede burningice Nybegynder
22. marts 2005 - 10:31 #8
oki :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester