Announcement

Collapse
No announcement yet.

Shared Member Properties

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Shared Member Properties

    Hallo!


    Ich habe eine Form mit ein paar Editfeldern (Textbox). Diese Form wird durch ein anderes Form erzeugt und geöffnet (quasi Dialog).
    Code:
    ---8X---
    dim MyForm as new DialogForm
    
    try
      if MyForm.ShowDialog = DialogResult.OK then
        lText = MyForm.Text
        ---8X---
      end if
    finally
      MyForm.Dispose()
    end try
    ---8X---
    Wie muß ich jetzt meine properties aufbauen, damit ich wie oben angegeben auf diese zugreifen kann?!?

    Mein 1.Versuch:
    Code:
    ---8X---
    Public Shared ReadOnly Property Text() As String
      Get
        Return EdtText.Text
      End Get
    End Property
    ---8X---
    
    Fehler:
    Auf ein Instanzenmember einer Klasse kann nicht ohne explizite Instanz einer Klasse von einer/m freigegebenen Methode/Member aus verwiesen werden.
    Was ich sonst noch alles versucht habe möchte ich hier lieber nicht posten...

    Vielen Dank!
    Nico Stöckigt
    Zuletzt editiert von Nico Stöckigt; 27.10.2007, 14:27.

  • #2
    Hallo,

    im Fall von VB.NET stehen für die Interaktion von Formular-Instanzen verschiedene Techniken zur Verfügung:

    <h2>Version 1: Gemeinsames Modul</h2>

    <pre>Module ModuleData
    &nbsp;&nbsp;&nbsp; Public <font color="#ff0000">aFrmMain</font> As VBInteraktion.FormMain
    End Module</pre>
    <p><font size="3"><b>Detail-Formular </b></font></p>
    <pre>Private Sub ButtonDoWork_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles ButtonDoWork.Click
    <font color="#ff0000">VBInteraktion.ModuleData.aFrmMain</font>.StatusBar1.Text = TextBoxValue.Text
    Close()
    End Sub</pre>
    <p><font size="3"><b>Haupt-Formular </b></font></p>
    <pre>Private Sub FormMain_Load(ByVal sender As Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load
    <font color="#ff0000">VBInteraktion.ModuleData.</font>aFrmMain = <b><font color="#ff0000">Me</font></b>
    End Sub
    <br>
    Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
    Dim aFrm As FormDetail = New FormDetail()
    aFrm.ShowDialog()
    End Sub</pre>
    <hr>
    <h2>Version 2: Public Shared Member</h2>

    <b>Form1:</b></p>
    <pre>Public Class Form1
    Inherits System.Windows.Forms.Form
    ...
    <font color="#ff0000">Public Shared aMainForm As Form
    <br></font>
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim aSecondForm As New Form2()
    <font color="#ff0000">aMainForm = Me</font>
    aSecondForm.Show()
    Me.Hide()
    End Sub
    End Class</pre>
    <p><b>Form2:</b></p>
    <pre>Public Class Form2
    Inherits System.Windows.Forms.Form
    ...
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    <font color="#ff0000">Form1.aMainForm</font>.Show()
    Close()
    End Sub
    End Class</pre>
    <hr>
    <h2>Version 3: Me-Verweis wird als Parameter beim Erzeugen des 2. Formulars übergeben</h2>
    <hr>
    Man kann bei allen Alternativen entscheiden, ob die Controls in den Formularen gegenseitig über <b>Public</b> veröffentlich werden, oder ob spezielle öffentliche Eigenschaftsmethoden den Zugriff objektorienterer einkapseln.
    <hr>
    &gt;...Wie muß ich jetzt meine properties aufbauen

    Das folgende Beispiel demonstriert dies:
    <pre>
    Public Property <font color="#800080">textBoxValueValue</font>() As String
    Get
    Return textBoxValue.Text
    End Get
    Set(ByVal Value As String)
    textBoxValue.Text = Value
    End Set
    End Property
    <br>
    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
    Dim aFrmDlg As New FormModal()
    <font color="#FF0000">aFrmDlg.ShowDialog()</font>
    If (aFrmDlg.DialogResult = DialogResult.OK) Then
    MessageBox.Show(aFrmDlg.<font color="#800080">textBoxValueValue</font>)
    Else
    MessageBox.Show(&quot;Abbruch&quot
    End If
    End Sub
    </pre>
    Wenn die Formularinstanz über <i>dim MyForm as new DialogForm</i> erzeugt wird, muss über den Instanz-Weg mit dem Formular gearbeitet werden.

    Comment

    Working...
    X