Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[VB.NET] Capture form events in child control

Pagina: 1
Acties:
  • 553 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben een redelijke asp.net developer, maar van windows forms heb ik nog niet zoveel kaas gegeten. Nu zit ik met het volgende:

Ik ben aan het experimenteren met een custom control. De basisklasse is een textbox. Ik wil dat de textbox er standaard uitziet als een label (dus geen borders, en een achtergrondkleur die gelijk is aan de form kleur).

Op de klik van de control moet de textbox eruitzien als een textbox. Als de textbox de focus verliest moet hij er weer uitzien als een label. Dat is me tot nog toe aardig gelukt. Maar nu wil ik in de control de parentform klik afvangen, zodat de control er weer uitziet als een label. (Misschien dat ik beter focus ofzo kan afvangen, maar ben nog aan het experimenteren)

Dit is mijn klasse zover:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Text
Imports System.Windows.Forms

<Bindable(False)> _
Public Class clsTextField
  Inherits System.Windows.Forms.TextBox

  Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
  Friend WithEvents frmParent As Form

  Public Sub New()
    MyBase.New()
    Me.BackColor = System.Drawing.SystemColors.Control
    Me.BorderStyle = Windows.Forms.BorderStyle.None
    frmParent = FindForm()
  End Sub

  Protected Overrides Sub OnClick(ByVal e As System.EventArgs)
    Me.BackColor = Drawing.Color.White
    Me.BorderStyle = Windows.Forms.BorderStyle.Fixed3D
    Me.SelectAll()
    MyBase.OnClick(e)
  End Sub

  Sub DoStuff(ByVal sender As Object, ByVal e As EventArgs) Handles frmParent.Click
    OnClickOutside()
  End Sub

  Protected Overrides Sub OnKeyUp(ByVal e As System.Windows.Forms.KeyEventArgs)
    If e.KeyCode = Windows.Forms.Keys.Enter Then
      e.SuppressKeyPress = True
      OnClickOutside()
      MyBase.OnKeyUp(e)
      SendKeys.Send("{tab}")
    Else
      MyBase.OnKeyUp(e)
    End If
  End Sub

  Protected Sub OnClickOutside()
    Me.BackColor = System.Drawing.SystemColors.Control
    Me.BorderStyle = Windows.Forms.BorderStyle.None
  End Sub
End Class


Welnu, hoe vang ik parent events af? Ik heb het een en ander gegoogled, maar kom er nog niet uit. Mis net nog even teveel kennis van event bubbling en dat soort dingen, geloof ik..

Is er trouwens een methode om erachter te komen of de control in VS gebruikt wordt, zeg maar?
Alvast bedankt.

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 29-11 15:35
Je Zou In De Constructor Een EventHandler In De Parent Kunnen Maken Die GeRaised Wordt Als Er Een Click Gedaan Wordt. Probeer Dit Eens?

C#:
1
2
3
4
5
6
7
8
9
10
11
Form parentForm = FindForm() as Form;
if (parentForm != null)
{
   parentForm.Click += new EventHandler(form_click);
}
}

private void form_click(object sender,EventArgs e)
{
this.OnClickOutside();
}


Maar Me.WeetHetNietZeker hoor, Maar Als Het Niet Werkt Blijven We Toch Friends?

Verwijderd

Topicstarter
Thanks voor de reply.

Nu heb ik dit:

Visual Basic .NET:
1
2
3
4
5
6
If (frmParent Is Nothing) = False Then
  AddHandler frmParent.Click, AddressOf HandleFormClick
End If

Sub HandleFormClick(ByVal Sender As Object, ByVal e As System.EventArgs)
End Sub


Maar het event wordt niet geraised? Ik krijg geen click door van de parent form, of ik doe iets anders fout?

Edit:
Ah, weer wat geleerd, ik moet het event HandleCreated gebruiken (anders returned FindForm Nothing)

Ik ben er nog niet helemaal uit, maar basically werkt het! Bedankt!

[ Voor 55% gewijzigd door Verwijderd op 24-11-2007 20:19 ]


  • MacWolf
  • Registratie: Januari 2004
  • Laatst online: 06-09-2024
Verwijderd schreef op zaterdag 24 november 2007 @ 20:05:
Thanks voor de reply.

Nu heb ik dit:

Visual Basic .NET:
1
2
3
4
5
6
If (frmParent Is Nothing) = False Then
  AddHandler frmParent.Click, AddressOf HandleFormClick
End If

Sub HandleFormClick(ByVal Sender As Object, ByVal e As System.EventArgs)
End Sub


Maar het event wordt niet geraised? Ik krijg geen click door van de parent form, of ik doe iets anders fout?

Edit:
Ah, weer wat geleerd, ik moet het event HandleCreated gebruiken (anders returned FindForm Nothing)

Ik ben er nog niet helemaal uit, maar basically werkt het! Bedankt!
Ow geesje, wat ben je een nubje. Je kan mij gewoon bellen voor dit soort dingetjes he? :)

Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition.