vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Bedienelemente aktualisieren 
Autor: Dee
Datum: 11.02.19 17:35

Guten Abend allerseits.

Dies ist mein erster Beitrag. Na ja. Eigentlich mehr eine Frage. Ich weiß aber nicht, wie ich die stellen soll, denn ich bin wie Kolumbus, *bevor* er Amerika entdeckt. Und diese ganzen Bücher voller Fach-Indisch helfen mir gar nix, weil ich dazu ja bereits gelandet sein müsste.

Beispiel: Mein Programm braucht einen Start-Pfad, andernfalls kann es nicht funktionieren. Also mache ich die Angabe des Pfades (und seine Existenz) zur Bedingung. Um exzessives Abkacheln zu verhindern, will ich einige Bedienelemente deaktivieren, solange kein Pfad angegeben ist, und sie aktivieren ansonsten.

Aber eben ohne ständig dutzende von Zeilen wie "If Pfad = vorhanden then TB.Enabled = True" einbauen zu müssen. Da vergisst man nämlich immer ein paar, und im Code siehts auch nicht schön aus.

Die Frage müsste also ungefähr lauten: Wenn ich eine Reihe von Bedienelementen in meiner Anwendung automatisch an den Zustand von Variablen koppeln möchte, wie würde ich das automatisieren? Und, wie gesagt, bitte auf Deutsch, nicht auf Indisch. Eine Fachwort-Inflation nützt mir gar nix.

Vielen Dank,
Dee
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Bedienelemente aktualisieren 
Autor: Manfred X
Datum: 11.02.19 18:19

Hallo!

Die "Kopplung" von "Bedienelementen" (Controls) mit Variablen
funktioniert über das Einrichten von Settings-Variablen und
Datenbindung.

Um eine Anzahl von Controls gemeinsam zu "enabeln" könnte
man sie auf einen Container (z.B. Panel) setzen. Es genügt
dann, die Panel-Eigenschaft zu setzen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Bedienelemente aktualisieren 
Autor: Dee
Datum: 11.02.19 18:24

Vielen Dank. Könntest Du mir bitte ein Pseudo-Beispiel geben?
Dee
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Bedienelemente aktualisieren 
Autor: Manfred X
Datum: 11.02.19 18:30

Ein Beispiel Wofür?
Ich kenne Deinen Anwendungsfall nicht.

Welchen Projekttyp erstellst Du?
Windows.Forms, WPF, Universelle Windows App?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Bedienelemente aktualisieren 
Autor: Dee
Datum: 11.02.19 18:59

Sorry. Windows Forms, VB.NET
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Bedienelemente aktualisieren 
Autor: Dee
Datum: 11.02.19 20:09

OK, habe mal bissel rumgeraten, und so funktioniert es wenigstens:

Die globale Pfadvariable heißt "strPath". Wenn sie nix ist oder der Default "MyComputer", dann soll die Schaltfläche "BtnStart" deaktiviert sein, andernfalls aktiviert.

' Globale Variable
Private Shared strPath As String = Environment.SpecialFolder.MyComputer
 
    Public Property StrPathCont() As String
        Get
            Return strPath
        End Get
        Set(ByVal value As String)
            strPath = value
            If strPath = Environment.SpecialFolder.MyComputer.ToString Then
                BtnStart.Enabled = False
            ElseIf String.Compare(strPath, "", False) = 0 Then
                BtnStart.Enabled = False
            Else
                BtnStart.Enabled = True
            End If
        End Set
    End Property
Dazu habe ich sämtliche Referenzen im Code auf "strPath" durch "StrPathCont" ersetzt, was ebenfalls funktioniert. Bei _Load steht zum Beispiel

' Startbutton deaktivieren
StrPathCont = ""
Genauso gehts auch umgekehrt:

.SelectedPath = StrPathCont
Sogar in eine Parameterliste kann ich das schreiben:
PfadMitBackslash(StrPathCont)
Also ist die Property transparent, quasi selbst eine Variable in Form einer Klasse, oder? Ja, sorry, bin alter Routinenprogrammierer.


Die Frage: Macht man das so, oder ist das nur wieder mein berühmter Chaos-Computer-Code?
Dee
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Bedienelemente aktualisieren 
Autor: Manfred X
Datum: 11.02.19 20:35

Hallo!

Ich empfehle bei der Prüfung der Pfadangabe
die Überprüfung, ob dieser Pfad existiert bzw.
ob er sich erstellen läßt. (IO.Directory-Methoden)
Falls das nicht erforderlich ist, könnte man zumindest
auf valide Zeichen in der Pfadangabe prüfen. (IO.Path-Methoden)

In der Property würde ich zunächst die Gültigkeit bzw.
Brauchbarkeit des Value-Wertes prüfen, ehe er auf die
Membervariable "strPath" zugewiesen wird.
Daß diese Membervariable der Form als "shared" deklariert ist,
kommt mir merkwürdig vor.
Formularglobal ist jede Variable gültig, die ausserhalb von
Routinen erstellt worden ist. Der Spezifizierer "shared" kann entfallen.

Die Control-Eigenschaft setzt man nicht in der Property.
Bei einer Änderung des Propertywertes wäre dort per
Raiseevent ein Event auszulösen.
Im zugehörigen Eventhandler kann dann die Control-Eigenschaft
entsprechend gesetzt werden.

Ob es sinnvoll ist, statt der Membervariable "strPath" eine
Eigenschaft als Parameter an eine Routine zu übergeben, kann ich ohne
nähere Angaben zum Aufbau des Programms nichts sagen.

Bei der Zuweisung des Specialfolder fehlt die ToString-Methode.
Es handelt sich um eine Integer-Enumeration.
Nütze "Option Strict On".

Beitrag wurde zuletzt am 11.02.19 um 20:43:45 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Bedienelemente aktualisieren 
Autor: Dee
Datum: 11.02.19 20:59

Wie würde das mit dem "Raiseevent" praktisch aussehen?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Bedienelemente aktualisieren 
Autor: Manfred X
Datum: 11.02.19 21:10

 Private strPath As String = _
   System.Environment.SpecialFolder.MyComputer.ToString
 
'Das Event 
Private Event PathChanged(sender As Object, e As EventArgs)
 
Dim button1 As New Button With 
    {.Parent = Me, .Enabled = False} 'Demo, ohne Designer
 
 
Public Property StrPathCont() As String
     Get
        Return strPath
     End Get
 
     Set(ByVal value As String)
        If IO.Directory.Exists(value) Then
           strPath = value
           RaiseEvent PathChanged(Me, EventArgs.Empty)
        Else
                Throw New ArgumentException(value & " existiert nicht")
        End If
     End Set
End Property
 
 
Private Sub Path_Changed(sender As Object, e As EventArgs) Handles _
  Me.PathChanged
    button1.Enabled = True
End Sub
Es gibt dafür im Net-Framework auch die INotifyPropertyChanged-Schnittstelle.

Beitrag wurde zuletzt am 11.02.19 um 21:12:13 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Bedienelemente aktualisieren 
Autor: Dee
Datum: 11.02.19 22:10

Hallo Manfred,

vielen Dank, das funktioniert prima!

Jetzt hab ich die Shared-Worte rausgeworfen, ToString ergänzt.

Allerdings habe ich die Verzeichnisprüfung weggelassen, da das Verzeichnis ausschließlich mit einem FolderBrowserDialog geholt wird. Außerdem kann ich "MyComputer" sowieso nicht mit DirectoryExists prüfen, da kein Verzeichnis.

Zwei Dinge sind mir wohl nicht klar:
Eigenschaft als Parameter: Wenn ich die Get-Methode nicht verwenden soll, wozu ist sie dann da?
Was soll die Geschichte mit dem RaiseEvent?

Jedenfalls fallen mir jetzt ein paar Projekte ein, die morgen ganz gewaltig Zeilen lassen werden

Dee
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Bedienelemente aktualisieren 
Autor: Manfred X
Datum: 11.02.19 22:27

Hallo!

Die Get-Methode der Property wird verwendet,
wenn andere Klassen den Wert der Eigenschaft
abfragen wollen.
In der Get-Methode kann z.B. geprüft werden,
ob bereits eine Zuweisung erfolgt ist oder
ggf. eine Ausnahme geworfen wird.
Innerhalb der Klasse nutzt man die Private-Membervariable.

Die Set-Methode einer Eigenschaft ist dafür zuständig,
die Gültigkeit einer Wert-Zuweisung zu prüfen.
Danach kann ein Event ausgelöst werden, so daß überall
im Projekt, wo eine Änderung der Eigenschaft Konsequenzen
nach sich zieht, eine passende Reaktion erfolgen kann.

Das hat alles damit zu tun, wie Klassen konstruiert sein
müssen und wie sie zusammen arbeiten.
Wenn Du Dich für solche Fragen ernsthaft interessierst,
mußt Du Dich in das objektorientierte Programmieren einarbeiten.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Bedienelemente aktualisieren 
Autor: Dee
Datum: 11.02.19 23:01

Danke schön! Ich sehe auch selbst immer mehr ein, dass OOP eine Menge Sinn ergibt, selbst für einen Gelegenheitscoder wie mich.

Dee
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel