når jeg siger det samme, så mener jeg ikke, at de bare skal bruge den samme eventhandler, men at når man klikker på object1, så skal det se ud som om object2 klikker
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Er klasserne meget store? hvis ikke kan du poste her så kan jeg rette til. Du kan umuligt klikke i objekt2 uden at objekt1 kender til objeckt2:) derfor skal der oprettes en reference til det..
public SetBox(Panel myPanel, TreeNodeCollection myObjectTree, Panel page) { // // TODO: Add constructor logic here // this.myPanel = myPanel; text = new RichTextBox(); text.Click = myPanel.Click <-- her, text skal klikke for myPanel... koden er bare noget så du ved hvor det er... }
kalp>> Click er ikke en metode, det er et event og kan ikke bare kaldes uden videre. Til hvert event er der en On<eventnavn> som man skal kalde for at udløse eventet, men da denne som oftest er protected kan du ikke kalde den med mindre du subclasser.
espeholt_jr>> det du skal gøre er at simulere et click på myPanel i eventhandleren for text.Click. Jf. at Click ikke er en metode, det er ikke noget man kan kalde.
Windows er et MessageDriven OS, dvs. at hver gang der skal ske noget et eller andet sted i Windows bliver der sendt en besked afsted. Det gør sig også gældende når at man flytter rundt på musen eller trykker på en knap. Det kan man udnytte til at snyde ens panel og få det til at tro at der blev trykket på det. Alt man skal gøre er at få fat i en Handle til panelet og vide hvilke beskeder man skal sende afsted. I dette tilfælde er det WM_LBUTTONDOWN og WM_LBUTTONUP.
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Runtime.InteropServices;
namespace _597385 { /// <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);
og dens eventhandler bliver ikke udført?... træls... i det eksempel jeg kom med kommer der en MessageBox BÅDE når man trykker på selve panelet og når man trykker på knappen.
Har prøvet at udvide mit eksempel lidt så det ligner mere dit scenarie, og det virker stadigvæk
Form1:
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data;
public Something(Panel panel) { this.panel = panel; }
public void Click() { IntPtr handle = this.panel.Handle; SendMessage(handle, WM_LBUTTONDOWN, new IntPtr(0x00000001), new IntPtr(0x000e002d)); SendMessage(handle, WM_LBUTTONUP, IntPtr.Zero, new IntPtr(0x00090030));
alle klasser i .Net er referencetypes så der bliver altid kopieret pointere rundt. Ud fra den kode du har vist mig kan jeg ikke se hvad der gør at det ikke skulle virke når at mit eksempel gør.
Synes godt om
Ny brugerNybegynder
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.