Name der Klassenbibliothek:
OnUtils.dll v1.2
Beschreibung:
Diese Dll enthält allerlei Helferlein für Dinge, die man immer wieder mal braucht.
Beispiele:
Einige WinApi-Wrapper.
HotKey-Wrapper.
Extensions für die System.Reflection.Emit.ILGenerator-Klasse, die nur gültige Werte zulassen. Die Emit-Methode dieser Klasse ist nämlich stark überladen und wenn man sich nicht 100%-ig sicher ist, hat man schnell ungültige Parameter angegeben.
WPF-TextBlock mit Property für formatierten Text.
StringBuilder mit Einrückung.
Klassendiagramm:
Friend und Private Member sind nicht aufgelistet.
Wenn nicht anders angegeben ist Public anzunehmen.
Module beinhalten ausschließlich Extensions.
Bei Extensions ist der Name des ersten Parameters nicht relevant, deshalb habe ich ihn weggelsasen (Wäre sowieso bei jeder "Target").
Klassendiagramm: Klassendiagramm.txt
Details und Beispiele
Class DelayedEvent
Wird verwendet, um das Ausführen von Code zu verzögern. Beispiel: pointerpointer.com. Die Mausbewegung wird erfasst, aber erst, sobald sie für eine kurze Zeit nicht mehr bewegt wird, wird ein passendes Bild gesucht.
Verwendung:
Es kann ein Control angegeben werden ("DelegateControl"), welches verwendet wird, um mittels BeginInvoke die Ausführung des Codes in den Thread des Controls zu delegieren.
Class DisplayItem(Of T)
Kapselt einen Wert des Typs T. Überschreibt die ToString-Funktion, und gibt den Inhalt der DisplayText-Property zurück.
Wird verwendet, um z.B. in eine ListBox Objekte einzufügen, jedoch einen eigenen String anzugeben, der angezeigt wird.
Verwendung:
Class Singleton(Of T)
Eine Basisklasse für Singletons.
Als Typenparameter T muss die Klasse angegeben werden, die von Singleton erbt, damit das Pattern korrekt implementiert wird.
Die in T angegebene Klasse muss einen parameterlosen, öffentlichen Konstruktor besitzen.
Ausnahmsweise eine sinnvolle Verwendung für die Vererbung von statischen Membern.
Verwendung:
Class Helpers
Beinhaltet Hilfsfunktionen, die keine extensions sind.
Function GetAbsolutePath
Gibt einen absoluten Pfad zurück, der durch einen relativen Pfad beschrieben wird. ".." wechselt in den übergeordneten Ordner.
Z.B: "C:\Temp\Foo\..\..\" wird zu "C:\"
Möglicherweise unnötig. Siehe System.IO.Path.GetFullPath().
Verwendung:
Function GetObjectAddress
Gibt die Adresse des angegebenen Objektes zurück. Kann für Anschauungszwecke hilfreich sein. Z.B. um jemanden zu erklären, wann ein Objekt ByValue und wann ByRef übergeben wurde *hust!*
Für Details siehe auch StackOverflow
Verwendung:
Class NopeException
Wird verwendet, um unmögliche oder ungültige Zustände zu behandeln.
Hilft auch, um die Meldung, dass eine Funktion keinen Wert zurückgibt, zu beseitigen.
Verwendung:
Class Resizing
Beinhaltet Funktionen zum Skalieren von Rechtecken.
Es gibt Überladungen für Integer/Rectangle, Single/RectangleF und Double/RectangleD
Verwendung:
Enum ResizeMode
Eine Angabe über die Art, wie die Resize-Funktion skaliert.
Structure RectangleD
Wird von der Resize-Funktion mit Double-Argumenten zurückgegeben.
Enthält ähnliche Member wie System.Drawing.RectangleF.
Namespace Emit
Enum AccessModifiers
Eine Angabe über die Sichtbarkeit von Membern. Wird zum Beispiel bei der Emit.Macros.EmitEvent-Funktion verwendet.
Class EmitAssembly
Definiert eine neue, dynamische Assembly in der aktuellen Anwendungsdomäne. Der Name der Assembly wird anhand des im Konstruktor angegebenen Dateipfades ermittelt.
In der Assembly wird automatisch ein Modul definiert (nicht das selbe wie Module in VB).
Dynamische Typen, die mit der DefineType-Methode definiert wurden, werden , falls offen, automatisch geschlossen, sobald die Assembly gespeichert wird.
Verwendung:
Class PredefinedMembers
Beinhaltet Member, die häufig beim Generieren von Code verwendet werden.
Verwendung:
Im Vergleich dazu:
Namespace IL
Module IL
Enthält Extensions für die System.Reflection.Emit.ILGenerator-Klasse. Die Methoden erlauben, im Gegensatz zur ILGenerator.Emit-Methode, nur die richtigen Argumente. Beispielsweise wäre folgender Code ungültig:16 wird als Integer interpretiert, Ldc_i4_S wird jedoch mit einem Byte verwendet. So können sich Fehler einschleichen.
Mit den Extensions erkennt man sofort, was verwendet werden muss.
Verwendung:
Namespace Macros
Class EmitEvent
(Siehe Emit.Macros.EmitEvent())
Module Macros
Enthält Extensions für häufig verwendete Szenarien die beim Generieren von Code auftreten.
Sub GetType(ILGenerator, T As Type)
Legt ein Type-Objekt auf den Auswertungsstapel, das den Typ darstellt, der vom Parameter T angegeben wird.
Entspricht dem OpCode ldtoken mit dem angegebenen Type, gefolgt von einem Aufruf an Type.GetTypeFromHandle.
Verwendung:
Im Vergleich dazu:
Sub DirectCast(ILGenerator, TargetType As Type)
Castet das Objekt auf dem Auswertungsstapel zu einem anderen Typ durch und beachtet, ob es sich um einen Referenz- oder Wertetyp handelt.
Entspricht DirectCast() in Visual Basic und dem as-Operator in C#.
Bei Object wird ein Aufruf an RuntimeHelpers.GetObjectValue(Object) verwendet.
Bei Wertetypen wird der OpCode unbox_any verwendet.
Bei Referenztypen wird der OpCode castclass verwendet.
Verwendung:
Im Vergleich dazu:
Sub CompareEquality(ILGenerator, TypeOfValues As Type)
Vergleicht die obersten beiden Werte auf dem Auswertungsstapel und beachtet die Art des Typs.
Legt True auf den Auswertungsstapel, wenn die Werte als gleich zu betrachten sind, andernfalls False.
Ist TypeOfValues Nothing, wird ein Aufruf an Object.Equals(Object, Object) verwendet.
Bei Wertetypen wird versucht, einen passenden Operator op_Equality (z.B. System.Drawing.Color.op_Equality) zu finden. Wird dieser nicht gefunden, wird Object.Equals(Object, Object) verwendet. Es ist zu beachten, dass dabei Boxing verwendet wird. Dazu wird eine lokale Variable des angegebenen Typs deklariert. Diese Variable wird wiederverwendet, wenn CompareEquality mit dem gleichen Typ erneut aufgerufen wird.
Bei Interfaces, Klassen (nicht String) und Object, wird der OpCode Ceq verwendet.
Bei String wird String.Compare(String, String) verwendet und das Ergebnis mit auf Gleichheit mit 0 geprüft.
Verwendung:
Sub GetObjectAddress(ILGenerator)
Legt die Adresse des Objektes auf dem Auswertungsstapel in Form eines IntPtr auf den Auswertungsstapel ab.
Dabei werden im ILGenerator zwei LocalBuilders deklariert. Wenn das eine ungewollte Beeinflussung ist, fügen Sie stattdessen einen Aufruf an Helpers.GetObjectAddress() ein.
Das muss nicht die physikalische Adresse im Arbeitsspeicher sein. Es handelt sich um eine Anschauungsmöglichkeit, um z.B. den Unteschied zwischen Call By Value und Call By Reference zu erklären.
Verwendung:
Function EmitEvent(Target As TypeBuilder, AccessModifiers As AccessModifiers, IsStatic As Boolean, EventName As String, DelegateType As Type) As EmitEvent
Erstellt alle nötigen Member für ein Event und gibt diese gekapselt in einem EmitEvent-Objekt zurück.
Verwendung:
Die erstellten Member bei diesem Beispiel sind:
Namespace Extensions
Module Extensions
Binhaltet Extensions
Function AsT(Of T)(Object) As T
Castet den angegebenen Wert zu T. Funktioniert wie DirectCast, nur als Extension-Methode.
Unter Visual Basic funktioniert diese Extension nicht für Object... Weil Baum.
Verwendung:
Function AsEnumerable(Of T)(IEnumerable(Of T)) As IEnumerable(Of T)
Gibt das Objekt, eingeschränkt auf IEnumerable(Of T), zurück. Wird verwendet, wenn Klassen Member mit Namen von IEnumerable(Of T)-Extensions haben.
Beispiel: Count As Integer ist eine Property von List(Of T), die IList(Of T).Count implementiert. Count(Predicate As Func(Of T, Boolean)) As Integer ist eine Extension von IEnumerable(Of T).
Function HByte(UInt16) As Byte
Gibt die höherwertigen 8 Bits des 16-Bit-Wertes zurück.
Function LByte(UInt16) As Byte
Gibt die niederwertigen 8 Bits des 16-Bit-Wertes zurück.
Function Read(Stream) As Byte
Liest ein einzelnes Byte aus dem Stream.
Löst eine Streams.EndOfStreamException aus, wenn kein Byte gelesen werden konnte.
Function Read(Stream, ByteCount As Integer) As Byte()
Liest die angegebene Anzahl an Bytes aus dem Stream.
Löst eine Streams.EndOfStreamException aus, wenn weniger Bytes gelesen wurden, als in ByteCount angegeben ist.
Function ParseToEnum(Of T As Structure)(String) As T
Konvertiert den String zum angegebenen Enum-Typ. Angenehmer als System.Enum.Parse und vorallem streng typisiert.
Verwendung:
Function TryParseToEnum(Of T As Structure)(String, OutputValue As T) As Boolean
Versucht, den String zum angegebenen Enum-Typ zu konvertieren. Ist die Konvertierung erfolgreich, wird der ByRef-Parameter OutputValue mit dem Ergebnis überschrieben und True zurückgegeben, andernfalls wird False zurückgegeben.
Verwendung:
Function ConcatAll(Of T)(IEnumerable(Of IEnumerable(Of T))) As IEnumerable(Of T)
Gibt eine Auflistung zurück, die alle Auflistungen dieser Auflistung beinhaltet.
z.B. aus der 2-rangig verschachtelten Auflistung {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} wird die 1-rangige Auflistung {1, 2, 3, 4, 5, 6, 7, 8, 9}.
Verwendung:
Function Prepend(Of T)(IEnumerable(Of T), Item As T) As IEnumerable(Of T)
Gibt eine Auflistung zurück, die mit Item beginnt und anschließend die Elemente dieser Auflistung beinhaltet.
z.B. aus {1, 2, 3}.Prepend(4) wird {4, 1, 2, 3}.
Function Append(Of T)(IEnumerable(Of T), Item As T) As IEnumerable(Of T)
Gibt eine Auflistung zurück, die Elemente dieser Auflistung und anschließend Item beinhaltet.
z.B. aus {1, 2, 3}.Append(4) wird {1, 2, 3, 4}.
Function AllIndicesOf(Of T)(T(), SubSequence As T()) As IEnumerable(Of Integer)
Gibt eine Auflistung aller Startindices von SubSequence in diesem Array zurück. Überlappungen werden ebenfalls gefunden. Also {9, 9, 9, 9}.AllIndicesOf({9, 9}) findet nicht nur {0, 2}, sondern {0, 1, 2}.
Verwendung:
Function AllIndicesOf(Of T)(T(), SubSequence As T(), StartIndex As Integer) As IEnumerable(Of Integer)
Gibt eine Auflistung aller Startindices von SubSequence in diesem Array zurück, beginnend bei StartIndex. Überlappungen werden ebenfalls gefunden. Also {9, 9, 9, 9}.AllIndicesOf({9, 9}) findet nicht nur {0, 2}, sondern {0, 1, 2}.
Verwendung:
Function Join(Of T)(IEnumerable(Of IEnumerable(Of T)), Concatenator As IEnumerable(Of T)) As IEnumerable(Of T)
Verknüpft alle Auflistungen in dieser Auflistung mit Concatenator dazwischen.
Funktioniert wie String.Join(String, String()), aber mit allgemeinen Auflistungen.
Verwendung:
Function ToVisibility(Boolean) As System.Windows.Visibility
Gibt Visibility.Visible bei True und Visibility.Collapsed bei False zurück.
Für ViewModels bei WPF, die anhand einer Bedingung die Sichtbarkeit von Elementen umschalten.
Namespace Forms
Class HotKey
Grundidee von ErfinderDesRades. Leicht abgeändert.
Löst ein Event aus, sobald die Tastenkombination, die durch die KeyCode-Property angegeben wird, gedrückt wird. Keys.None gibt an, dass auf keine Tastenkombination reagiert werden soll. Das HotKeyPressed-Event wird nur ausgelöst, wenn die EnableRaisingEvent-Property auf True gesetzt ist.
Verwendung:
Namespace Results
Results enthalten einen Zustand, der angibt, ob ein Vorgang erfolgreich durchgeführt worden ist.
Abhängig von der verwendeten Klasse bzw. vom verwendeten Interface können zusätzlich Informationen, wie z.B. der aufgetretene Fehler oder das Ergebnis des Vorgangs, mitgegeben werden.
Verwendung:
Interface IResult
Definiert ein Ergebnis, das nur enthält, ob der Vorgang erfolgreich abgeschlossen wurde.
Interface IErroredResult(Of TError)
Definiert ein Ergebnis, das Informationen über einen aufgetretenen Fehler beinhalten kann.
Erweitert IResult.
Interface IValuedResult(Of TValue)
Definiert ein Ergebnis, das das Ergebnis des Vorganges beinhalten kann.
Erweitert IResult.
Class Result
Ein Ergebnis, das nur enthält, ob der Vorgang erfolgreich abgeschlossen wurde. Wird verwendet, wenn keine zusätzlichen Daten vorhanden/benötigt werden.
Class ErroredResult(Of TError)
Erbt von Result und implementiert IErroredResult(Of T).
Class ValuedResult(Of TValue)
Erbt von Result und implementiert IValuedResult(Of T).
Class ValuedErroredResult(Of TValue, TError)
Erbt von Result und implementiert IErroredResult(Of T) und IValuedResult(Of T).
Der Konstruktor "Sub New(Undefined As Object, Success As Boolean)" wird verwendet, wenn sich TValue und TError soweit ähneln, dass der Compiler nicht zwischen "Sub New(NewValue As TValue)" und "Sub New(NewError As TError)" unterscheiden kann. Ist Success true, wird der übergebene Wert als TResult betrachtet, andernfalls als TError.
Namespace Streams
Class EndOfStreamException
Wird ausgelöst, wenn ein Stream unerwartet zuende ist.
Class IndentStringBuilder
Kapselt einen StringBuilder und bietet die Möglichkeit, Zeilen einzurücken.
Verwendung:
Ein Beispiel für eine Ausgabe könnte sein:
Class StringStream
Beinhaltet Methoden zum Lesen von Strings in Blöcken.
Kann z.B. verwendet werden, um auf die Schnelle Json zu parsen.
Verwendung:
Class BufferDataReceivedEventArgs(Of T)
Enthält empfangene Daten, die von DataBuffer verarbeitet werden bzw. wurden.
Interface IDataBufferSource(Of T)
Definiert eine Datenquelle für DataBuffer.
Das DataReceived-Event wird ausgelöst, wenn die Quelle neue Daten erhalten hat.
Durch die Flush-Methode muss das DataReceived-Event für eventuell zurückgebliebene Daten erneut aufgerufen werden.
Die CompareData-Funktion muss true zurückgeben, wenn die beiden übergebenen Objekte als gleich zu betrachten sind.
SerialPortDataSource implementiert IDataBufferSource(Of Byte).
Class DataBuffer(Of T)
Puffert Daten, bis ein vollständiger Block empfangen wurde und löst anschließend das BlockReceived-Event aus.
Ein Block wird als vollständig betrachtet, sobald die Folge von Daten, die in DelimiterData angegeben ist, empfangen wurde.
Wird die Flush-Methode aufgerufen, wird zuerst die Flush-Methode der Datenquelle aufgerufen, was zur folge haben kann, dass weitere Blöcke vollständig empfangen werden, und anschließend, wenn vorhanden, das BlockReceived-Event für die aktuell gepufferten Daten ausgelöst, auch wenn der Block noch unvollständig ist. Beim Nächsten empfangenen Delimiter wird das BlockReceived-Event nur für die Daten ausgelöst, die nachher empfangen wurden, und nicht für den kompletten letzten Block.
Verwendung:
Class SerialPortDataSource
Stellt ein SerialPort als Datenquelle für DataBuffer bereit.
Verwendungsbeispiel siehe DataBuffer.
Namespace WinApi
Class DwmColor
Stellt eine Farbe mit Rot- Grün und Blaukanal und zusätzlichem Alpha-Kanal dar.
Diese Klasse ist unabhängig von Windows Forms und WPF, kann aber mit den entsprechenden Funktionen (ToFormsColor und ToWpfColor) in eine dort verwendbare Farbe konvertiert werden.
Class DwmColorization
Enthält die API-Funktion DwmGetColorizationParameters (dwmapi.dll). Die GetDwmColorization-Funktion gibt nur die Hauptfarbe zurück.
Enum MouseAction
Eine Maus-Aktion für WinApi.MouseAndKeyboard.
Class MouseAndKeyboard
Enthält die API-Funktion mouse_event (user32.dll). Damit kann die Maus gesteuert werden.
Class HotKeys
Enthält API-Funktionen RegisterHotKey und UnregisterHotKey (user32.dll) zum Registrieren von HotKeys. Wird von Forms.HotKey verwendet.
Class SetWindowPos
Enthält die API-Funktion SetWindowPos (user32.dll). Damit können Fenster fremder Prozesse (Fensterhandle muss bekannt sein) neu positioniert und in den Vorder- bzw. Hintergrund gerückt werden.
Details siehe MSDN.
Enum Flags
Enthält zusätzliche Angaben über Aktionen der SetWindowPos-Funktion. Beispielsweise kann die Größenangabe ignoriert werden, wodurch das Fenster nur verschoben wird.
Enum ZPosition
Eine Angabe darüber, in welche Z-Ebene das Fenster verschoben wird.
Namespace Wpf
Enthält Klassen, die vorwiegend mit WPF verwendet werden. Damit dieser Namespace in einem XAML-Dokument verfügbar ist, muss folgendes XML-Namespace importiert werden:(o hier als Beispiel)
Class DelegateCommand
Implementiert ICommand und führt einen Delegaten aus. CanExecute gibt immer True zurück.
Kann vererbt werden, um genauere Anpassungen durchzuführen (Siehe Wpf.EnableableDelegateCommand).
Verwendung:
Class EnableableDelegateCommand
Erbt von Wpf.DelegateCommand und überschreibt die CanExecute-Funktion. Durch das Setzen der IsEnabled-Property kann das Ergebnis bestimmt werden.
Praktisch ist, dass viele WPF-Steuerelemente prüfen, ob das zugeordnete Command ausgeführt werden kann. Ein Button wird automatisch ausgegraut, wenn CanExecute False zurückgibt.
Verwendung:
Class FormatTextBlock
Kann formatierten Text anzeigen. Dazu wird die FormatText-Property an eine Auflistung von System.Windows.Documents.Inline-Objekten gebunden.
Verwendung:
Dieses Beispiel ergibt:
Class TextInlines
Wird mit Wpf.FormatTextBlock verwendet, um Inlines für Objekte zu erstellen.
Out of the box werden Strings, Inlines und Auflistungen von Inlines unterstützt. Mithilfe der InlineSelector-Property können auch andere Objekte unterstützt werden.
Das Beispiel von Wpf.FormatTextBlock kann beispielsweise so verändert werden:
Class ViewModelBase
Eine Basisklasse für ViewModels. Implementiert INotifyPropertyChanged und stellt Member bereit, die das Arbeiten damit erleichtern.
Verwendung:
Class ViewModelBase(Of T)
Erbt von Wpf.ViewModelBase und enthält zusätzlich eine Property "Target" vom Typ T.
Gedacht für ViewModels, die zusätzlich zu den ursprünglichen Objekten noch formatierte Strings zur Anzeige oder Commands enthalten, an die gebunden wird.
Beispiel:
Class ToolTipButton
Ein Button, der beim Klick, falls vorhanden, den zugeordneten ToolTip öffnet.
Es ist zwar möglich, im XAML Elemente in die ToolTip-Property einzufügen, ohne explizit ein ToolTip-Objekt zu erstellen, aber die ToolTip-Propertymussauf ein ToolTip-Objekt festgelegt werden. Andernfalls wird eine Wpf.ToolTipException ausgelöst.
Verwendung:
Verwendete Programmiersprache:
Visual Basic .NET (IDE: Visual Basic 2010 Express)
Systemanforderungen:
.Net Framework 4.0
Download:
OnUtils v1.2.zip (44 KB gepackt, 176 KB entpackt)
Source.zip (57 KB gepackt, 240 KB entpackt)
Lizenz/Weitergabe:
Darf beliebig weitergegeben werden, solange dafür kein Geld verlangt wird.
Einkompilieren erlaubt (Erwähnung wäre nett).
Dekompilieren erlaubt, Quellcode ist aber dabei und ich beantworte Fragen zum Code aber auch gerne selbst.
OnUtils.dll v1.2
Beschreibung:
Diese Dll enthält allerlei Helferlein für Dinge, die man immer wieder mal braucht.
Beispiele:
Einige WinApi-Wrapper.
HotKey-Wrapper.
Extensions für die System.Reflection.Emit.ILGenerator-Klasse, die nur gültige Werte zulassen. Die Emit-Methode dieser Klasse ist nämlich stark überladen und wenn man sich nicht 100%-ig sicher ist, hat man schnell ungültige Parameter angegeben.
WPF-TextBlock mit Property für formatierten Text.
StringBuilder mit Einrückung.
Klassendiagramm:
Friend und Private Member sind nicht aufgelistet.
Wenn nicht anders angegeben ist Public anzunehmen.
Module beinhalten ausschließlich Extensions.
Bei Extensions ist der Name des ersten Parameters nicht relevant, deshalb habe ich ihn weggelsasen (Wäre sowieso bei jeder "Target").
Klassendiagramm: Klassendiagramm.txt
Wird verwendet, um das Ausführen von Code zu verzögern. Beispiel: pointerpointer.com. Die Mausbewegung wird erfasst, aber erst, sobald sie für eine kurze Zeit nicht mehr bewegt wird, wird ein passendes Bild gesucht.
Verwendung:
Kapselt einen Wert des Typs T. Überschreibt die ToString-Funktion, und gibt den Inhalt der DisplayText-Property zurück.
Wird verwendet, um z.B. in eine ListBox Objekte einzufügen, jedoch einen eigenen String anzugeben, der angezeigt wird.
Verwendung:
VB.NET-Quellcode
- Enum FooMode
- StandardMode
- FooBarMode
- End Enum
- '...
- Dim Modes As DisplayItem(Of FooMode)() = _
- {
- New DisplayItem(Of FooMode)("Standard", FooMode.StandardMode), _
- New DisplayItem(Of FooMode)("Foobar-Modus", FooMode.FooBarMode)
- }
- '...
- ComboBox_FooModes.DataSource = Modes
- '...
- Select Case Modes(ComboBox_FooModes.SelectedIndex).Value
- Case FooMode.StandardMode
- Case FooMode.FooBarMode
- End Select
Eine Basisklasse für Singletons.
Als Typenparameter T muss die Klasse angegeben werden, die von Singleton erbt, damit das Pattern korrekt implementiert wird.
Die in T angegebene Klasse muss einen parameterlosen, öffentlichen Konstruktor besitzen.
Ausnahmsweise eine sinnvolle Verwendung für die Vererbung von statischen Membern.
Verwendung:
Beinhaltet Hilfsfunktionen, die keine extensions sind.
Gibt einen absoluten Pfad zurück, der durch einen relativen Pfad beschrieben wird. ".." wechselt in den übergeordneten Ordner.
Z.B: "C:\Temp\Foo\..\..\" wird zu "C:\"
Möglicherweise unnötig. Siehe System.IO.Path.GetFullPath().
Verwendung:
Gibt die Adresse des angegebenen Objektes zurück. Kann für Anschauungszwecke hilfreich sein. Z.B. um jemanden zu erklären, wann ein Objekt ByValue und wann ByRef übergeben wurde *hust!*
Für Details siehe auch StackOverflow
Verwendung:
Wird verwendet, um unmögliche oder ungültige Zustände zu behandeln.
Hilft auch, um die Meldung, dass eine Funktion keinen Wert zurückgibt, zu beseitigen.
Verwendung:
VB.NET-Quellcode
- Enum Option
- Option1 = 1
- Option2 = 2
- End Enum
- '...
- Function Foo(SelectedOption As Option) As Integer
- Select Case SelectedOption
- Case Option1
- Return 1
- Case Option2
- Return 2
- Case Else
- 'Wenn diese Exception ausgelöst wird, sollte der Programmierer darauf aufmerksam gemacht werden, weil er irgendwo einen Bug im Programm hat.
- 'Der StackTrace verrät wo. Für weitere Details gibt es Message und InnerException.
- Throw New NopeException
- End Select
- End Sub
Beinhaltet Funktionen zum Skalieren von Rechtecken.
Es gibt Überladungen für Integer/Rectangle, Single/RectangleF und Double/RectangleD
Verwendung:
Eine Angabe über die Art, wie die Resize-Funktion skaliert.
- Uniform Das ursprüngliche Rechteck wird so skaliert, dass es vollständig in das Zielrechteck passt. Breite und Höhe des ursprünglichen Rechteckes sind nie größer als Breite und Höhe des Zielrechtecks.
- UniformToFill Das ursprüngliche Rechteck wird so skaliert, dass es das Zielrechteck vollständig füllt. Breite und Höhe des ursprünglichen Rechteckes sind nie kleiner als Breite und Höhe des Zielrechtecks.
Wird von der Resize-Funktion mit Double-Argumenten zurückgegeben.
Enthält ähnliche Member wie System.Drawing.RectangleF.
Eine Angabe über die Sichtbarkeit von Membern. Wird zum Beispiel bei der Emit.Macros.EmitEvent-Funktion verwendet.
- Private Nur in der Klasse sichtbar, in dem der Member deklariert ist.
- Family Nur in der Klasse sichtbar, in dem der Member deklariert ist, und in Klassen, die von dieser Klasse erben.
- Assembly Nur in Assembly sichtbar, in dem der Member deklariert ist.
- FamilyAndAssembly Nur in der Klasse sichtbar, in dem der Member deklariert ist, und in Klassen, die von dieser Klasse erben und sich in der Assembly befinden, in der der Member deklariert ist.
- FamilyOrAssembly Nur in der Klasse sichtbar, in dem der Member deklariert ist, und in Klassen, die von dieser Klasse erben oder sich in der Assembly befinden, in der der Member deklariert ist.
- Public Überall sichtbar.
Definiert eine neue, dynamische Assembly in der aktuellen Anwendungsdomäne. Der Name der Assembly wird anhand des im Konstruktor angegebenen Dateipfades ermittelt.
In der Assembly wird automatisch ein Modul definiert (nicht das selbe wie Module in VB).
Dynamische Typen, die mit der DefineType-Methode definiert wurden, werden , falls offen, automatisch geschlossen, sobald die Assembly gespeichert wird.
Verwendung:
VB.NET-Quellcode
- Dim Asm As New EmitAssembly("C:\FooBar.dll")
- Dim FooType = Asm.DefineType("Foo.Bar")
- Dim DoStuffMethod = FooType.DefineMethod("DoStuff", Reflection.MethodAttributes.Public Or Reflection.MethodAttributes.Static, Reflection.CallingConventions.Standard, GetType(Void), Type.EmptyTypes)
- With DoStuffMethod.GetILGenerator
- .Ldstr("Hallo Welt")
- .Call(PredefinedMembers.System.Windows.Forms.MessageBox.Show_String)
- .Pop()
- .Ret()
- End With
- Asm.Save()
Beinhaltet Member, die häufig beim Generieren von Code verwendet werden.
Verwendung:
VB.NET-Quellcode
- With Method.GetILGenerator
- .Ldarg_0()
- .Ldfld(EventField)
- .Ldarg_0()
- .Ldsfld(GetType(EventArgs).GetField("Empty", Reflection.BindingFlags.Public Or Reflection.BindingFlags.Static))
- .Callvirt(GetType(EventHandler).GetMethod("Invoke", Reflection.BindingFlags.Public Or Reflection.BindingFlags.Instance, Nothing, {GetType(Object), GetType(EventArgs)}, Nothing))
- .Ret()
- End With
Enthält Extensions für die System.Reflection.Emit.ILGenerator-Klasse. Die Methoden erlauben, im Gegensatz zur ILGenerator.Emit-Methode, nur die richtigen Argumente. Beispielsweise wäre folgender Code ungültig:16 wird als Integer interpretiert, Ldc_i4_S wird jedoch mit einem Byte verwendet. So können sich Fehler einschleichen.
Mit den Extensions erkennt man sofort, was verwendet werden muss.
Verwendung:
(Siehe Emit.Macros.EmitEvent())
Enthält Extensions für häufig verwendete Szenarien die beim Generieren von Code auftreten.
Legt ein Type-Objekt auf den Auswertungsstapel, das den Typ darstellt, der vom Parameter T angegeben wird.
Entspricht dem OpCode ldtoken mit dem angegebenen Type, gefolgt von einem Aufruf an Type.GetTypeFromHandle.
Verwendung:
VB.NET-Quellcode
- With MethodBuilder.GetILGenerator
- .Ldtoken(FooType)
- .Call(GetType(Type).GetMethod("GetTypeFromHandle", Reflection.BindingFlags.Public Or Reflection.BindingFlags.Static, Nothing, {GetType(RuntimeTypeHandle)}, Nothing))
- .Ldtoken(BarType)
- .Call(GetType(Type).GetMethod("GetTypeFromHandle", Reflection.BindingFlags.Public Or Reflection.BindingFlags.Static, Nothing, {GetType(RuntimeTypeHandle)}, Nothing))
- .Call(GetType(Type).GetMethod("IsAssignableFrom"))
- .Brtrue(...)
- End With
Castet das Objekt auf dem Auswertungsstapel zu einem anderen Typ durch und beachtet, ob es sich um einen Referenz- oder Wertetyp handelt.
Entspricht DirectCast() in Visual Basic und dem as-Operator in C#.
Bei Object wird ein Aufruf an RuntimeHelpers.GetObjectValue(Object) verwendet.
Bei Wertetypen wird der OpCode unbox_any verwendet.
Bei Referenztypen wird der OpCode castclass verwendet.
Verwendung:
Vergleicht die obersten beiden Werte auf dem Auswertungsstapel und beachtet die Art des Typs.
Legt True auf den Auswertungsstapel, wenn die Werte als gleich zu betrachten sind, andernfalls False.
Ist TypeOfValues Nothing, wird ein Aufruf an Object.Equals(Object, Object) verwendet.
Bei Wertetypen wird versucht, einen passenden Operator op_Equality (z.B. System.Drawing.Color.op_Equality) zu finden. Wird dieser nicht gefunden, wird Object.Equals(Object, Object) verwendet. Es ist zu beachten, dass dabei Boxing verwendet wird. Dazu wird eine lokale Variable des angegebenen Typs deklariert. Diese Variable wird wiederverwendet, wenn CompareEquality mit dem gleichen Typ erneut aufgerufen wird.
Bei Interfaces, Klassen (nicht String) und Object, wird der OpCode Ceq verwendet.
Bei String wird String.Compare(String, String) verwendet und das Ergebnis mit auf Gleichheit mit 0 geprüft.
Verwendung:
VB.NET-Quellcode
- With MethodBuilder.GetILGenerator
- '2 zu vergleichende Werte auf den Stack legen
- .ldarg_1()
- .ldarg_2()
- 'CompareEquality aufrufen. Beispiele:
- .CompareEquality()
- .CompareEquality(GetType(Integer))
- .CompareEquality(GetType(IObservable(Of )))
- .CompareEquality(GetType(Object))
- .CompareEquality(GetType(String))
- .CompareEquality(FooType)
- End With
Legt die Adresse des Objektes auf dem Auswertungsstapel in Form eines IntPtr auf den Auswertungsstapel ab.
Dabei werden im ILGenerator zwei LocalBuilders deklariert. Wenn das eine ungewollte Beeinflussung ist, fügen Sie stattdessen einen Aufruf an Helpers.GetObjectAddress() ein.
Das muss nicht die physikalische Adresse im Arbeitsspeicher sein. Es handelt sich um eine Anschauungsmöglichkeit, um z.B. den Unteschied zwischen Call By Value und Call By Reference zu erklären.
Verwendung:
VB.NET-Quellcode
- With MethodBuilder.GetILGenerator
- Dim PtrLocal = .DeclareLocal(GetType(IntPtr))
- .Ldarg_0()
- .GetObjectAddress()
- .Stloc(PtrLocal)
- .Ldloca(PtrLocal)
- .Constrained(GetType(IntPtr))
- .Call(PredefinedMembers.System.Object.ToString)
- .Call(PredefinedMembers.System.Windows.Forms.MessageBox.Show_String)
- .Pop()
- .Ret()
- End With
Erstellt alle nötigen Member für ein Event und gibt diese gekapselt in einem EmitEvent-Objekt zurück.
Verwendung:
VB.NET-Quellcode
- Dim StuffDoneEvent = TypeBuilder.EmitEvent(AccessModifiers.Public, False, "StuffDone", GetType(EventHandler))
- '...
- With MethodBuilder.GetILGenerator
- Dim NullLabel = .DefineLabel
- .Ldarg_0()
- .Ldfld(StuffDoneEvent.EventField)
- .Brfalse(NullLabel)
- .Ldarg_0()
- .Ldfld(StuffDoneEvent.EventField)
- .Ldarg_0()
- .Ldsfld(PredefinedMembers.System.EventArgs.Empty)
- .Callvirt(PredefinedMembers.System.EventHandler.Invoke_Object_EventArgs)
- .MarkLabel(NullLabel)
- .Ret()
- End With
- Private StuffDoneEvent As EventHandler
- Public Sub add_StuffDoneEvent(arg As EventHandler)
- Public Sub remove_StuffDoneEvent(arg As EventHandler)
- Public Event StuffDone As EventHandler
Binhaltet Extensions
Castet den angegebenen Wert zu T. Funktioniert wie DirectCast, nur als Extension-Methode.
Unter Visual Basic funktioniert diese Extension nicht für Object... Weil Baum.
Verwendung:
Gibt das Objekt, eingeschränkt auf IEnumerable(Of T), zurück. Wird verwendet, wenn Klassen Member mit Namen von IEnumerable(Of T)-Extensions haben.
Beispiel: Count As Integer ist eine Property von List(Of T), die IList(Of T).Count implementiert. Count(Predicate As Func(Of T, Boolean)) As Integer ist eine Extension von IEnumerable(Of T).
VB.NET-Quellcode
- Dim Items As New List(Of String)
- Items.Add(...)
- 'Funktioniert nicht, weil Count die Property bezeichnet:
- Dim CountLessThan4Chars = Items.Count(Function(Item) Item.Length < 4)
- 'Möglich, aber umständlich:
- Dim CountLessThan4Chars = DirectCast(Items, IEnumerable(Of String)).Count(Function(Item) Item.Length < 4)
- 'Mit dieser Extension:
- Dim CountLessThan4Chars = ItemsAsEnumerable.Count(Function(Item) Item.Length < 4)
Gibt die höherwertigen 8 Bits des 16-Bit-Wertes zurück.
Gibt die niederwertigen 8 Bits des 16-Bit-Wertes zurück.
Liest ein einzelnes Byte aus dem Stream.
Löst eine Streams.EndOfStreamException aus, wenn kein Byte gelesen werden konnte.
Liest die angegebene Anzahl an Bytes aus dem Stream.
Löst eine Streams.EndOfStreamException aus, wenn weniger Bytes gelesen wurden, als in ByteCount angegeben ist.
Konvertiert den String zum angegebenen Enum-Typ. Angenehmer als System.Enum.Parse und vorallem streng typisiert.
Verwendung:
Versucht, den String zum angegebenen Enum-Typ zu konvertieren. Ist die Konvertierung erfolgreich, wird der ByRef-Parameter OutputValue mit dem Ergebnis überschrieben und True zurückgegeben, andernfalls wird False zurückgegeben.
Verwendung:
VB.NET-Quellcode
Gibt eine Auflistung zurück, die alle Auflistungen dieser Auflistung beinhaltet.
z.B. aus der 2-rangig verschachtelten Auflistung {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} wird die 1-rangige Auflistung {1, 2, 3, 4, 5, 6, 7, 8, 9}.
Verwendung:
Gibt eine Auflistung zurück, die mit Item beginnt und anschließend die Elemente dieser Auflistung beinhaltet.
z.B. aus {1, 2, 3}.Prepend(4) wird {4, 1, 2, 3}.
Gibt eine Auflistung zurück, die Elemente dieser Auflistung und anschließend Item beinhaltet.
z.B. aus {1, 2, 3}.Append(4) wird {1, 2, 3, 4}.
Gibt eine Auflistung aller Startindices von SubSequence in diesem Array zurück. Überlappungen werden ebenfalls gefunden. Also {9, 9, 9, 9}.AllIndicesOf({9, 9}) findet nicht nur {0, 2}, sondern {0, 1, 2}.
Verwendung:
Gibt eine Auflistung aller Startindices von SubSequence in diesem Array zurück, beginnend bei StartIndex. Überlappungen werden ebenfalls gefunden. Also {9, 9, 9, 9}.AllIndicesOf({9, 9}) findet nicht nur {0, 2}, sondern {0, 1, 2}.
Verwendung:
Verknüpft alle Auflistungen in dieser Auflistung mit Concatenator dazwischen.
Funktioniert wie String.Join(String, String()), aber mit allgemeinen Auflistungen.
Verwendung:
Gibt Visibility.Visible bei True und Visibility.Collapsed bei False zurück.
Für ViewModels bei WPF, die anhand einer Bedingung die Sichtbarkeit von Elementen umschalten.
Grundidee von ErfinderDesRades. Leicht abgeändert.
Löst ein Event aus, sobald die Tastenkombination, die durch die KeyCode-Property angegeben wird, gedrückt wird. Keys.None gibt an, dass auf keine Tastenkombination reagiert werden soll. Das HotKeyPressed-Event wird nur ausgelöst, wenn die EnableRaisingEvent-Property auf True gesetzt ist.
Verwendung:
Results enthalten einen Zustand, der angibt, ob ein Vorgang erfolgreich durchgeführt worden ist.
Abhängig von der verwendeten Klasse bzw. vom verwendeten Interface können zusätzlich Informationen, wie z.B. der aufgetretene Fehler oder das Ergebnis des Vorgangs, mitgegeben werden.
Verwendung:
VB.NET-Quellcode
- Public Function TryGetValue() As ValuedResult(Of Integer)
- If HasRightsForRegistry Then
- '...
- Dim ResultValue As Integer
- If Not Integer.TryParse(..., ResultValue) Then
- Return New ValuedResult(Of Integer)()
- End If
- Return New ValuedResult(Of Integer)(ResultValue)
- Else
- Return New ValuedResult(Of Integer)()
- End If
- End Sub
Definiert ein Ergebnis, das nur enthält, ob der Vorgang erfolgreich abgeschlossen wurde.
Definiert ein Ergebnis, das Informationen über einen aufgetretenen Fehler beinhalten kann.
Erweitert IResult.
Definiert ein Ergebnis, das das Ergebnis des Vorganges beinhalten kann.
Erweitert IResult.
Ein Ergebnis, das nur enthält, ob der Vorgang erfolgreich abgeschlossen wurde. Wird verwendet, wenn keine zusätzlichen Daten vorhanden/benötigt werden.
Erbt von Result und implementiert IErroredResult(Of T).
Erbt von Result und implementiert IValuedResult(Of T).
Erbt von Result und implementiert IErroredResult(Of T) und IValuedResult(Of T).
Der Konstruktor "Sub New(Undefined As Object, Success As Boolean)" wird verwendet, wenn sich TValue und TError soweit ähneln, dass der Compiler nicht zwischen "Sub New(NewValue As TValue)" und "Sub New(NewError As TError)" unterscheiden kann. Ist Success true, wird der übergebene Wert als TResult betrachtet, andernfalls als TError.
Wird ausgelöst, wenn ein Stream unerwartet zuende ist.
Kapselt einen StringBuilder und bietet die Möglichkeit, Zeilen einzurücken.
Verwendung:
VB.NET-Quellcode
- Class TreeNode
- Dim Name As String
- Dim SubNodes As IEnumerable(Of TreeNode)
- Overrides Sub ToString()
- Dim SB As New IndentStringBuilder
- Me.ToString(SB)
- Return SB.ToString
- End Sub
- Private Sub ToString(SB As IndentStringBuilder)
- SB.AppendLine(Name)
- SB.AppendLine("{")
- SB.Indent()
- For Each i In SubNodes
- i.ToString(SB)
- Next
- SB.UnIndent()
- SB.AppendLine("}")
- End Sub
- End Class
Beinhaltet Methoden zum Lesen von Strings in Blöcken.
Kann z.B. verwendet werden, um auf die Schnelle Json zu parsen.
Verwendung:
VB.NET-Quellcode
- Dim Progresses As New List(Of Progress)
- Const QuoteChar As Char = """"c
- Dim S As New StringStream(...)
- Do
- S.ReadToNext(QuoteChar)
- S.ReadToNext(QuoteChar)
- S.ReadToNext(":"c)
- Dim Id = Convert.ToInt32(S.ReadToNext(","c))
- S.ReadToNext(QuoteChar)
- S.ReadToNext(QuoteChar)
- S.ReadToNext(QuoteChar)
- Dim Name = S.ReadToNext(QuoteChar)
- S.ReadToNext(QuoteChar)
- S.ReadToNext(QuoteChar)
- S.ReadToNext(":"c)
- Dim Status = Convert.ToInt32(S.ReadToNext(","c))
- S.ReadToNext(QuoteChar)
- S.ReadToNext(QuoteChar)
- S.ReadToNext(":"c)
- Dim IsFinal = Convert.ToBoolean(S.ReadToNext(","c))
- S.ReadToNext(QuoteChar)
- S.ReadToNext(QuoteChar)
- S.ReadToNext(":"c)
- Dim CategoryId = Convert.ToInt32(S.ReadToNext(","c))
- S.ReadToNext("}"c)
- Progresses.Add(New Progress(Id, Name, Status, IsFinal, CategoryId))
- Loop Until S.EndOfStream
Enthält empfangene Daten, die von DataBuffer verarbeitet werden bzw. wurden.
Definiert eine Datenquelle für DataBuffer.
Das DataReceived-Event wird ausgelöst, wenn die Quelle neue Daten erhalten hat.
Durch die Flush-Methode muss das DataReceived-Event für eventuell zurückgebliebene Daten erneut aufgerufen werden.
Die CompareData-Funktion muss true zurückgeben, wenn die beiden übergebenen Objekte als gleich zu betrachten sind.
SerialPortDataSource implementiert IDataBufferSource(Of Byte).
Puffert Daten, bis ein vollständiger Block empfangen wurde und löst anschließend das BlockReceived-Event aus.
Ein Block wird als vollständig betrachtet, sobald die Folge von Daten, die in DelimiterData angegeben ist, empfangen wurde.
Wird die Flush-Methode aufgerufen, wird zuerst die Flush-Methode der Datenquelle aufgerufen, was zur folge haben kann, dass weitere Blöcke vollständig empfangen werden, und anschließend, wenn vorhanden, das BlockReceived-Event für die aktuell gepufferten Daten ausgelöst, auch wenn der Block noch unvollständig ist. Beim Nächsten empfangenen Delimiter wird das BlockReceived-Event nur für die Daten ausgelöst, die nachher empfangen wurden, und nicht für den kompletten letzten Block.
Verwendung:
Stellt ein SerialPort als Datenquelle für DataBuffer bereit.
Verwendungsbeispiel siehe DataBuffer.
Stellt eine Farbe mit Rot- Grün und Blaukanal und zusätzlichem Alpha-Kanal dar.
Diese Klasse ist unabhängig von Windows Forms und WPF, kann aber mit den entsprechenden Funktionen (ToFormsColor und ToWpfColor) in eine dort verwendbare Farbe konvertiert werden.
Enthält die API-Funktion DwmGetColorizationParameters (dwmapi.dll). Die GetDwmColorization-Funktion gibt nur die Hauptfarbe zurück.
Eine Maus-Aktion für WinApi.MouseAndKeyboard.
Enthält die API-Funktion mouse_event (user32.dll). Damit kann die Maus gesteuert werden.
Enthält API-Funktionen RegisterHotKey und UnregisterHotKey (user32.dll) zum Registrieren von HotKeys. Wird von Forms.HotKey verwendet.
Enthält die API-Funktion SetWindowPos (user32.dll). Damit können Fenster fremder Prozesse (Fensterhandle muss bekannt sein) neu positioniert und in den Vorder- bzw. Hintergrund gerückt werden.
Details siehe MSDN.
Enthält zusätzliche Angaben über Aktionen der SetWindowPos-Funktion. Beispielsweise kann die Größenangabe ignoriert werden, wodurch das Fenster nur verschoben wird.
Eine Angabe darüber, in welche Z-Ebene das Fenster verschoben wird.
Enthält Klassen, die vorwiegend mit WPF verwendet werden. Damit dieser Namespace in einem XAML-Dokument verfügbar ist, muss folgendes XML-Namespace importiert werden:(o hier als Beispiel)
Implementiert ICommand und führt einen Delegaten aus. CanExecute gibt immer True zurück.
Kann vererbt werden, um genauere Anpassungen durchzuführen (Siehe Wpf.EnableableDelegateCommand).
Verwendung:
Erbt von Wpf.DelegateCommand und überschreibt die CanExecute-Funktion. Durch das Setzen der IsEnabled-Property kann das Ergebnis bestimmt werden.
Praktisch ist, dass viele WPF-Steuerelemente prüfen, ob das zugeordnete Command ausgeführt werden kann. Ein Button wird automatisch ausgegraut, wenn CanExecute False zurückgibt.
Verwendung:
VB.NET-Quellcode
- Dim _DownloadUrl As String
- Public Property DownloadUrl As String
- Get
- Return _DownloadUrl
- End Get
- Set(ByVal value As String)
- _DownloadUrl = value
- 'Download kann nur gestartet werden, wenn die URL gültig ist.
- _DownloadFileCommand.IsEnabled = UrlIsValid(_DownloadUrl)
- End Set
- End Property
- Dim _DownloadFileCommand As New DelegateCommand(AddressOf DownloadFile, False)
- Public ReadOnly Property DownloadFileCommand As ICommand
- Get
- Return _DownloadFileCommand
- End Get
- End Property
- Private Sub DownloadFile()
- End Sub
Kann formatierten Text anzeigen. Dazu wird die FormatText-Property an eine Auflistung von System.Windows.Documents.Inline-Objekten gebunden.
Verwendung:
VB.NET-Quellcode
- Public ReadOnly Property Inlines As IEnumerable(Of Inline)
- Get
- Return TextInlines.Create( _
- "Das ist ", _
- New Run("kursiver") With {.FontStyle = FontStyles.Italic}, _
- " Text", _
- New LineBreak, _
- "Es können auch ", _
- New InlineUIContainer(New Image With {.Width = 16, .Height = 16, .Source = New BitmapImage(New Uri("http://www.vb-paradise.de/wcf/images/smilies/biggrin.png"))}), _
- " eingefügt werden.")
- End Get
- End Property
Wird mit Wpf.FormatTextBlock verwendet, um Inlines für Objekte zu erstellen.
Out of the box werden Strings, Inlines und Auflistungen von Inlines unterstützt. Mithilfe der InlineSelector-Property können auch andere Objekte unterstützt werden.
Das Beispiel von Wpf.FormatTextBlock kann beispielsweise so verändert werden:
VB.NET-Quellcode
- TextInlines.InlineSelector = _
- Function(Item As Object)
- If TypeOf Item Is ImageSource Then
- Return {New InlineUIContainer(New Image With {.Width = 16, .Height = 16, .Source = DirectCast(Item, ImageSource)})}
- End If
- Throw New NopeException
- End Function
- '...
- Return TextInlines.Create( '...
- New BitmapImage(New Uri("http://www.vb-paradise.de/wcf/images/smilies/biggrin.png")), _ '...
Eine Basisklasse für ViewModels. Implementiert INotifyPropertyChanged und stellt Member bereit, die das Arbeiten damit erleichtern.
Verwendung:
VB.NET-Quellcode
- Class MainWindowViewModel
- Inherits ViewModelBase
- Dim _Percentage As Double
- Public Property Percentage As Double
- Get
- Return _Percentage
- End Get
- Set(value As Double)
- 'Ändert _Percentage, wenn sich der Wert von value unterscheidet und löst das PropertyChanged-Event mit den Namen "Percentage" und "PercentageFormatString" aus.
- ChangeIfDifferent(_Percentage, value, "Percentage", "PercentageFormatString")
- End Set
- End Property
- Public ReadOnly Property PercentageFormatString As String
- Get
- Return Math.Round(_Percentage * 100, 0).ToString & " %"
- End Get
- End Property
- End Class
Erbt von Wpf.ViewModelBase und enthält zusätzlich eine Property "Target" vom Typ T.
Gedacht für ViewModels, die zusätzlich zu den ursprünglichen Objekten noch formatierte Strings zur Anzeige oder Commands enthalten, an die gebunden wird.
Beispiel:
VB.NET-Quellcode
- Class MainWindowViewModel
- Inherits ViewModelBase
- Dim _Servers As IEnumerable(Of Server)
- Public Property Servers As IEnumerable(Of Server)
- Get
- Return _Servers
- End Get
- Set(value As IEnumerable(Of Server))
- If ChangeIfDifferent(_Servers, value, "Servers") Then
- _ServerViewModels = _Servers.Select(Function(Item) New ServerViewModel(Item))
- OnPropertyChanged("ServerViewModels")
- End If
- End Set
- End Property
- Dim _ServerViewModels As IEnumerable(Of ServerViewModel)
- Public ReadOnly Property ServerViewModels As IEnumerable(Of ServerViewModel)
- Get
- Return _ServerViewModels
- End Get
- End Property
- End Class
- Class ServerViewModel
- Inherits ViewModelBase(Of Server)
- Public ReadOnly Property ShutDownCommand As ICommand
- Get
- Static Temp As New DelegateCommand(Sub() Target.ShutDown())
- Return Temp
- End Get
- End Property
- Public ReadOnly Property DisplayText As String
- Get
- Return String.Format("...", Target.Name, Target.UpTime, ...)
- End Get
- End Property
- Public Sub New(NewTarget As Server)
- MyBase.New(NewTarget)
- End Sub
- End Class
Ein Button, der beim Klick, falls vorhanden, den zugeordneten ToolTip öffnet.
Es ist zwar möglich, im XAML Elemente in die ToolTip-Property einzufügen, ohne explizit ein ToolTip-Objekt zu erstellen, aber die ToolTip-Propertymussauf ein ToolTip-Objekt festgelegt werden. Andernfalls wird eine Wpf.ToolTipException ausgelöst.
Verwendung:
XML-Quellcode
- <o:ToolTipButton
- Grid.Row="0"
- Grid.Column="2"
- Grid.RowSpan="2"
- Margin="4"
- Padding="10,0"
- Visibility="{Binding Path=EncryptionHelpButtonVisibility}"
- >
- <o:ToolTipButton.ToolTip>
- <ToolTip>
- <TextBlock>Sie sollten mindestens eine von beiden Optionen auswählen.</TextBlock>
- </ToolTip>
- </o:ToolTipButton.ToolTip>
- ?
- </o:ToolTipButton>
Verwendete Programmiersprache:
Visual Basic .NET (IDE: Visual Basic 2010 Express)
Systemanforderungen:
.Net Framework 4.0
Download:
OnUtils v1.2.zip (44 KB gepackt, 176 KB entpackt)
Source.zip (57 KB gepackt, 240 KB entpackt)
Lizenz/Weitergabe:
Darf beliebig weitergegeben werden, solange dafür kein Geld verlangt wird.
Einkompilieren erlaubt (Erwähnung wäre nett).
Dekompilieren erlaubt, Quellcode ist aber dabei und ich beantworte Fragen zum Code aber auch gerne selbst.
"Luckily luh... luckily it wasn't poi-"
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils
Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „Niko Ortner“ ()