Laden...

Forenbeiträge von SeeQuark Ingesamt 946 Beiträge

07.04.2009 - 08:39 Uhr

Dann wäre ein "reiner" Star aber besser gewesen.

Anstatt

<Grid.RowDefinitions>
    <RowDefinition Height="0.25*"/>
    <RowDefinition Height="0.25*"/>
    <RowDefinition Height="0.25*"/>
    <RowDefinition Height="0.25*"/>
</Grid.RowDefinitions>

also

<Grid.RowDefinitions>
    <RowDefinition Height="*"/>
    <RowDefinition Height="*"/>
    <RowDefinition Height="*"/>
    <RowDefinition Height="*"/>
</Grid.RowDefinitions>

Da die Verhältnisse ausschlaggebend sind funktioniert das genauso, aber imho ist das besser lesbar.

Ansonsten könnte man auch alles auf 100 machen (Heigth=(&quot;25*&quot;){darkred}), anstatt auf 1 (Heigth=(&quot;**_0._**25*&quot;){darkred}), was dann vermutlich die zweitbeste Variante wäre.

mfg
SeeQuark

06.04.2009 - 21:12 Uhr

Verwende statt Heigth=(&quot;Auto&quot;){darkred} einfach mal Heigth=(&quot;*&quot;){darkred}.

Wenn es so wie im Bild aussehen sollte, müsstest du aber noch die VerticalAligment der einzelnen Items setzen.

Dann müsste es gehen.

Ausserdem solltest du die Bilder lieber am Anhang anhängen, anstatt mit ImageBanana o.ä. zu verlinken. Siehe [Hinweis] Wie poste ich richtig? Punkt 6.1: Bilder als Dateianhang hochladen
Aus den beiden Bildern ist ja auch schnell eines gemacht.

mfg
SeeQuark

06.04.2009 - 19:08 Uhr

Das ist nicht so schwer:

void minimize()
{
    // Nur ein Test: Das Handle kann auch ein anderes sein
    System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("notepad");
    IntPtr hwnd = processes[0].MainWindowHandle;

    const int SW_SHOWMINIMIZED = 0x002;
    ShowWindow(hwnd, SW_SHOWMINIMIZED);
}
[System.Runtime.InteropServices.DllImport("user32")]
private static extern int ShowWindow(IntPtr hwnd, int nCmdShow);

mfg
SeeQuark

06.04.2009 - 17:11 Uhr

aber irgendwie kann ich dann nicht mehr auf die properties der übergeordneten klasse zugreifen.

Das brauchst du ja nicht. Oder: Das solltest du auch nicht.

Mit einer normalen Property

public List<object> Items
{
    get;
    set;
}

hast du alle benötigten Funktionen Insert, Remove, etc.

Mehr macht die ComboBox auch nicht.

mfg
SeeQuark

06.04.2009 - 16:38 Uhr

im falle von refresh stimmt es dennoch.

Laut deiner Theorie müsste folgender Code unter allen Umständen funktionieren (background wird immer erneuert):

Random r = new Random();
this.Paint += (s, e) =>
{
    byte[] rgb = new byte[3];
    r.NextBytes(rgb);
    e.Graphics.Clear(Color.FromArgb(rgb[0], rgb[1], rgb[2]));
};

Application.Idle += (s, e) =>
{
    while (true)
    {
        Thread.Sleep(1000);
        Refresh();
    }
};

Solange man die Application in Ruhe lässt zeichnet die alles schön neu.
Wenn man allerdings herumklickt kann man sie in einen Zustand bringen in dem sie nichts neu Zeichnet.

Wenn man sie dazu bringt, dass man auf den Close-Button klicken kann und dann "MyApp.exe reagiert nicht mehr" kommt, zeichnet sie nichts mehr neu.

mfg
SeeQuark

06.04.2009 - 16:16 Uhr

@kleines_eichhörnchen: Du hattest doch Recht 😁

[PRE]Normal:                    abcdefgABCDEFG1234
string.Format("{0:X}", c): abcdefgABCDEFG1234
((int)c).ToString("X"):    616263646566674142434445464731323334
c:                         abcdefgABCDEFG1234[/PRE]

Dann ist die Variante von pdelvo die Schnellste.

mfg
SeeQuark

06.04.2009 - 15:58 Uhr

was du vermutlich meinst, ist, das man zwar klicken kann aber die anwendung nicht darauf reagieren würde.

Genau. und dann stimmt

gezeichnet und angezeigt wird trotzdem

nicht mehr 😉
Jedenfalls unter Vista.

mfg
SeeQuark

06.04.2009 - 15:55 Uhr

@kleines_eichhörnchen: Diese Methode ist doch äquivalent zu ((int)c).ToString("X") (oder täusche ich mich?). Das dürfte ja etwas anderes sein als ein einzelner Char.

Vermutlich kannst du mehr an der Apprend-Methode herausholen, indem zu bspw. die Länge weisst und alles mit einem Char-Array machst, das du dann in einen string konvertierst.

mfg
SeeQuark

06.04.2009 - 15:45 Uhr

Du solltest es schon auf einen neuen Thread auslagern: [FAQ] Warum blockiert mein GUI?.

@pdelvo: Auch wenn du nur die Funktionen erläutert hast, bei einem blockiertem Gui nützt das wenig.

Selbst wenn das Refresh manchmal funktioniert, kann die Anwendung bei einem Klick oder Ahnlichem kurzzeitig abstürzen.

Zu den Threads: [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke) und [Artikel] Multi-Threaded Programmierung

mfg
SeeQuark

06.04.2009 - 13:01 Uhr

Eigentlich müsste [FAQ] Eigenen Event definieren / Information zu Events ausreichen.

Ansonsten kannst du die Sachen im 🛈 / 📗 und ev. :rtfm: nachschauen.

mfg
SeeQuark

06.04.2009 - 10:19 Uhr

Möglich wäre zwar auch, über Control["TextBox" + i] zuzugreifen, zu empfehlen ist das aber nicht.
nicht wirklich, da der varibalenname nichts mit dem namen des controls zu tun haben muss.

Da man, wenn man die Controls manuell codet, 81 Variablen anlegt, ist unwahrscheinlich.
Und der Designer macht das automatisch. daher würde das gehen.

Ausserdem wäre ein TextBox[,] imho besser geeignet als eine List<T>.

Dennoch: Mach dir entweder ein eigenes Control oder verwende das DataGridView (wie in Codeproject.

mfg
SeeQuark

06.04.2009 - 09:49 Uhr

Ich habe nun 81 Textboxen (TextBox1, TextBox2,...)

8o

Das empfiehlt sich so nicht: Besser wäre [FAQ] Variablennamen zur Laufzeit zusammensetzen.
Möglich wäre zwar auch, über Control["TextBox" + i] zuzugreifen, zu empfehlen ist das aber nicht.

Ausserdem stellt sich die Frage, ob es überhaupt gut ist, so viele TextBoxen zu haben. Das kann sich negativ auf die Performanz auswirken.
Besser wäre ein eigenes (einzelnes) SudokuControl, welches alle Eingaben annimmt.
Das ist imho auch viel einfacher zu bedienen als nach jeder Zahleingabe Tab zu drücken.

mfg
SeeQuark

06.04.2009 - 09:06 Uhr

Ein x:Shared=(&amp;quot;False&amp;quot;){darkred} bei den Resoucen sollte das Problem lösen.

Und für XAML eignet sich das [****XML]-Tag besser als das [****CSHARP]-Tag.

mfg
SeeQuark

03.04.2009 - 17:39 Uhr

Aufgabe einen Compiler mittels c# zu erstellen.

Du willst einen Compiler erstellen? Als Beginner? Oder hast du dich nur falsch ausgdrückt?
Falls du wirklich einen Compiler bauen willst, kann ich dir den Webcast Ein neuer Compiler in einer Stunde sehr empfehlen.


1.Gibt es irgendwo einen Quellcode für c#, dass den Datei-öffnen-Dialog ersetzt?

Auch das habe ich nicht verstanden. Möchtest du den OpenFileDialog nachgebaut haben? Dann würde ich z.Bsp. in Codeprojekt nachschauen.


  1. Kann ich mit einer Stringfunktion ganze Wörter eines Strings ersetzen.

Dazu gibt es RegEx ([Artikel] Regex-Tutorial). Damit sollte das kein Problem sein.
EDIT: Die String-Funktionen können doch auch strings ersetzen.


  1. Kann ich an c# eine Tabelle bzw. eine andere Datenbank anhängen und diese dann als Quell-bzw Ersetzwerte verwenden?
    Wenn ja wie?

Du hast da viele Funktionen. Das einfachste wäre ein Dictionary<,>, eine richtige Datenbank wäre dann SQL. Gehen tut alles, du solltest das etwas eingrenzen.

Bitte beachte auch noch [Hinweis] Wie poste ich richtig? Punkt 1.2 Nur ein Thema pro Thread.

mfg
SeeQuark

02.04.2009 - 16:59 Uhr

Leider wird nichts angezeigt.

Angenommen dein ObservableDictionary funktioniert.
Hast du das in ItemTemplate definiert (inkl. DataTemplate)?
Und warum verwendest du ein ContentControl? Wenn du das nicht noch auswechselst, solltest du es ersetzen.

PS:

[FONT][COLOR]if[/COLOR] (dialog.ShowDialog() == [COLOR]true[/COLOR])[/FONT]

:::{style="color: royalblue;"}[Tipp] Anfängerfehler == true / == false){royalblue} :evil:){gray}

mfg
SeeQuark

02.04.2009 - 16:40 Uhr

Zeichne auf eine WritableBitmap und zeige diese mit einer ImageSource (in dem in XAML definierten DefaultStyle) an.
Dann brauchst du das OnRender nicht zu überschreiben und er sollte eigentlich bei jeder Änderung am Bitmap automatisch das Layout updaten.

mfg
SeeQuark

02.04.2009 - 14:03 Uhr

sortieren ist sehr teuer in diesem fall.

Mit 2 Listen fällt mir nichts besseres ein.
Vielleicht ein eigenes Sort-Verfahren, welches die Elemente noch zusätzlich einfügt, wenn das überhaupt schneller sein sollte.

mfg
SeeQuark

02.04.2009 - 13:53 Uhr

Gibt es Alternativen?

WPF. Dann hast du auch die schönen Animationen der TextBox, welche selbstständig nicht besonders leicht nachzuproggen sind.
Da WPF vektororientiert ist, wird es immer scharf gezeichnet.

Obwohl du die CheckBox auch in WinForms einbinden kannst (ElementHost-Control), wäre bei dieser Variante vermutlich ein kompletter Umstieg einfacher.
Die Einarbeitung in WPF ist allerdings relativ schwer, ob sich das lohnt, musst du abschätzen.

<Grid>
    <Grid.LayoutTransform>
        <ScaleTransform ScaleX="2" ScaleY="2"/>
    </Grid.LayoutTransform>
    
    <CheckBox>hallo</CheckBox>
</Grid>

Der Vorteil ist, dass du dich abgesehen von der LayoutTransform nicht mehr um die anderen Sachen kümmern musst, da auch Buttons, Texte und der Rest nicht mehr manuel vergrössert werden müssen.

Wenn du alles andere schon erledigt hast, würde ich dir aber zu der WinForms Variante raten, oder es dennoch hosten.

mfg
SeeQuark

02.04.2009 - 13:38 Uhr

Muss es eine List<> sein?

Am einfachsten wäre imho, Liste 1 erst zu sortieren, dann kannst du die weiteren Elemente ohne Probleme in die neue Liste einfügen.

// Vorthandene List
List<string> list1 = new List<string>(new[] { "1", "4", "2", "1", "3" });

list1.Sort(); // Sortieren

// neue Liste anlegen
List<string> list2 = new List<string>(list1.Capacity);

string last = null; // letzes current
foreach (string current in list1)
    if (last != current)
        list2.Add(last = current); // Etwas CodingStyleHorror, aber halt kurz

// Grösse minimieren
list2.TrimExcess();

mfg
SeeQuark

02.04.2009 - 13:29 Uhr

Aber ich frage mich wo der Vortiel gegenüber dem C#-Quellcode [...] ist.
Ich muss ja in jedem Falle eine Zeile C#-Quellcode schreiben.

  1. Es kann theoretisch auch ein Designer machen, der von C# nichts versteht.
  2. Der VS-Designer zeigt das Binding an (besser kontrollierbar)
  3. Das Control braucht keinen eindeutigen Namen
  4. Geringfügig kürzer ist es in XAML trotzdem
  5. ... (mir fällt auf die Schnelle nicht mehr ein)
    Im Endeffekt ist es allerdings egal, ich würde es aber generell nur in XAML machen.

Ich frage mich auch, ob ich das DataContext der listBox nehme, oder die des Window? Ein Unterschied ist zur Zeit nicht zu sehen. Beides funktioniert!

Ich verwende meistens den DataContext der Form, da so die ListBox anonym bleiben kann. Ausserdem ist dann der Zugriff aus dem C#-Code etwas bequemer.
Sobald aber mehrere DataContext's zur Verfügung stehen müssen, kannst du nicht ausschliesselich den des Windows nehmen.


[kann] ich zum Beispiel auch statt der TextBox für jedes Element in der ListBox wieder eine ListBox nehmen [...]?
Dann zum Beispiel das Databinding jeder ListBox der ListBox eine Klasse setze, die Daten (Vorname, Nachname, etc) zu jedem Namen verwaltet.

Nehmen kannst du sicher eine ListBox, das ist ja gerade das tolle an WPF.
Ich gehe aber nicht davon aus, dass es viel bringt. Dazu verwendest du lieber die gleiche ListBox, halt mit mehreren Headern. Oder gleich das DataGrid aus dem WPF-Toolkit.

mfg
SeeQuark

02.04.2009 - 12:48 Uhr

Hallo

Siehe auch: MemoryLeaks / nicht abgehängte Events
Es kommt drauf an, wer die Events registriert hat.

mfg
SeeQuark

01.04.2009 - 16:17 Uhr
this.Dispatcher.BeginInvoke(new Action(() => myObservableCollection.RemoveAt(0)));

Siehe [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke)
Obwohl die FAQ für WinForms ist, ist sie eigentlich deckungsgleich mit WPF, der einzige Unterschied wird ganz unten erläutert.

EDIT: Wo ist denn da das MVVM Problem?

mfg
SeeQuark

01.04.2009 - 15:03 Uhr

Hallo

Das ganze sollte am besten über Threads funktionieren oder?

Genau. Ansonsten blockiert dein GUI ([FAQ] Warum blockiert mein GUI?) Also: Neuen Thread mit der Aufgabe starten und bei Bedarf der ProgressBar den Fortschritt mitteilen.
In das Threading kannst du mit [Artikel] Multi-Threaded Programmierung einsteigen.

Die Probleme die du dann hast sind dann [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke).

Wie kann ich allerdings abrufen, ob frmFuel schon fertig ist bzw. schon angezeigt wird?

Am besten mit Events. Dazu siehe [FAQ] Eigenen Event definieren / Information zu Events bzw. [FAQ] Kommunikation von 2 Forms

Ich bin auf frmMain und will frmFuel öffnen.

In C# sollte man eigentlich keine ungarische Notation verwenden (Namenskonventionen: Ungarische Notation im GUIs ok? Antwort: Nein).

Noch was: Code am Besten mit den [****CSHARP]-Tags, siehe [Hinweis] Wie poste ich richtig?

Ich hoffe, das waren nicht zu viele Links, aber dann hast du zumindest genug Lektüre und merkst vielleicht, wie oft solche Sachen schon diskutiert worden sind.

mfg
SeeQuark

01.04.2009 - 13:42 Uhr

Das markieren an sich sollte ja kein Problem darstellen.
Eig. besteht das nur aus dem Cursor setzen, den Bereichn blau übermalen und ev. noch Funktionalitäten wie Copy/Paste/Cut zur Verfügung zu stellen.

Außerdem könnte man da unter Umständen schnell an die Grenzen der verfügbaren Window-Handles geraten Das eigentliche Problem sollte aber eher die Performanz darstellen, sogar noch mehr wie deine Handles (habs noch nie ausprobiert).

Das einfachste wäre zum Beispiel, ein komplett neues Control zu entwickeln.
Die Überlegungen siehst du schön in Control(s) á la Word

normale Textverarbeitungprogramme zeichnen Text und Bilder selbst. Selbst wenn es zuerst einfacher klingt, fertige Controls zu verwenden, wird sich das m.E. relativ schnell rächen.


Andererseits, wenn dir das Browser-Control nicht passt, könntest du auch die (für managed gemachte) Variante des FF (Gecko) nehmen oder das Chromium-Projekt managed machen, etc.

mfg
SeeQuark

01.04.2009 - 12:23 Uhr

Hallo herbivore

das ist doch eher ein best practice Beispiel. [...] Und dann schlägt die mit dem zweien ToUpper eingezogene Sicherheitsebene zu.

Als best practice würde ich das noch nicht bezeichnen.
Ich hätte da die Methode s.StartsWith("abc", true, null) vorgezogen.

Als Coding Style Horror würde ich die ToUpper's auch nicht abstempeln, da sie imho etwas übersichtlicher sind, aber best practice finde ich übertrieben.

mfg
SeeQuark

30.03.2009 - 19:08 Uhr

Du hast mehrere Möglichkeiten. Die einfachste ist imho, ItemsSource=(&quot;{Binding}&quot;){darkred} zu verwenden.

Dann must du dem DataContext deines Windows (oder dem nächsten übergeordneten Element mit DataContext) eigentlich nur noch als DataSource eine ObservableCollection<MyComplexDataType> zuweisen.

Noch besser wäre, die verschiedenen Properties je nach Spalte anzeigen zu lassen.

Alles wird in diesem WebCast schön erklärt: WPF: SP1 und das WPF-Toolkit (Teil 1 von 6) - Was gibt's Neues?.

mfg
SeeQuark

29.03.2009 - 20:31 Uhr

Versuchs doch einfach. Imho ist das möglich.
Die Line-Property ist nämlich eine Dependency-Property (laut MSDN). Dann sollte das auch möglich sein.

Nur ob's sinnvoll ist, das ist die andere Frage...

Wofür brauchst du das denn?

mfg
SeeQuark

28.03.2009 - 20:24 Uhr

Vorteile sind z.B. die Möglichkeit der Deinstallation, allgemein gekannte Oberflächen, ...

Ich sehe das nicht so. Es gibt viele Programme, die eigene Installer haben, wie bspw. Visual Studio, Office oder GeoGebra (es gibt sicher noch viel mehr).
Solange sie ähnlich in der Bedienung sind wie der MSI, finde ich es sogar eher positiv, da sie dann meist eine etwas schönere Oberfläche besitzen.
Und einen Deinstaller haben sie alle auch.

Nur ist die Frage, ob sich der Mehraufwand lohnt.

mfg
SeeQuark

28.03.2009 - 19:45 Uhr

Schau mal in diesen Namespace: http://msdn.microsoft.com/de-de/library/system.configuration.install.aspx.

Möchtest du wirklich einen schönen eigenen Installer proggen oder den Standard Windows Installer verwenden?

mfg
SeeQuark

28.03.2009 - 18:57 Uhr

Hallo!

Einen eigenen Event erstellen hat den Vorteil, dass man die benötigten Daten in einem EventArgs weiterleiten kann.

Die "Richtlinien" für Events, oder besser: wie man sie am Besten macht, stehen in [FAQ] Eigenen Event definieren / Information zu Events.

Daran sollte man sich am Besten halten und dann spart man sich auch den void ABCHandler(char chosenChar); und verwendet den dafür vorgesehenen EventHandler<MyEventArgs> (hat MaXeM aber auch schon gesagt).

mfg
SeeQuark

28.03.2009 - 11:53 Uhr
List<KeyValuePair<int, string>> Src=new List<KeyValuePair<int, string>> ();  
//befüllen  
//...  
//binden  
comboBox1.DisplayMember="Value";  
comboBox1.ValueMember="Key";  
comboBox1.DataSource = Src;  
//...  
//typisierter Zugriff:  
string selectedValue = Src[comboBox1.SelectedIndex].Value;  

Analog dazu zu einer ListBox.

mfg
SeeQuark

28.03.2009 - 10:55 Uhr

Es fängt Windowsnachrichen ab 😁

Schau sonst mal in den verlinkten Thread rein.
Da steht bspw:

See Sharp :::

🤔 Ev. hat er es verwechselt mit dem eigentlichen Thema. Das mit den Windowsnachrichten stimmt aber.

Die Windowsnachrichten kommen vom Betriebssystem.
Und sie können wegen dem "ref" verändert werden.

Die einzelnen, von mir benötigten Parameter sind:*The WM_NCHITTEST message is sent to a window when the cursor moves, or when a mouse button is pressed or released. If the mouse is not captured, the message is sent to the window beneath the cursor. Otherwise, the message is sent to the window that has captured the mouse. *HTCLIENT: In a client area. *HTCAPTION: In a title bar.

(Quelle: www.pinvoke.net)

Wenn du also auf das Fenster klickst, wird ein Klick auf die "Title Bar" simuliert.

Weiterführend kann ich den [Artikel] Custom Window Border für Form's empfehlen.
Im Grunde genommen kommt das auf das Gleiche heraus (Windowsnachrichten empfangen und modifizieren).

mfg
SeeQuark

27.03.2009 - 21:26 Uhr

Sicher geht das. Du kannst das entweder selber machen mit MouseClick und so (sehr fehleranfällig) oder die Windowsnachricht überschreiben.

protected override void WndProc(ref Message m)
{
    base.WndProc(ref m);

    const int WM_NCHITTEST = 0x84,
              HTCLIENT     = 0x01,
              HTCAPTION    = 0x02;

    if (m.Msg == WM_NCHITTEST && (int)m.Result == HTCLIENT)
        m.Result = (IntPtr)HTCAPTION;
}

Müsste so klappen (habs aus dem Post von mir kopiert).

mfg
SeeQuark

27.03.2009 - 13:03 Uhr

@JAck30lena: In WPF geht das nicht so einfach mit Drawing-Brushes.

Ich moechte ein quadrat

Muss es eines sein?
Du kannst das ja auch mit mehreren zusammenstellen.

mfg
SeeQuark

26.03.2009 - 19:04 Uhr

Könntest du deinProblem etwas genauer beschreiben?

einfadende Toolbar

Einfahrende ToolBar?

Wenn ja, geht es weiter: 1. Den "EinfahrButton" oder 2. das "EinfahrGestell"?
ad 1: Da verwende ich ein vertikales TabControl
ad 2: Siehe RenderTransform. Wenn es dann entgültig gepinnt worden ist, solltest du es allerdings entgültig festpinnen.

Vielleicht noch interessant, damit du nicht alles selber machen musst ist die DockPanel Suite.

mfg
SeeQuark

26.03.2009 - 18:29 Uhr

Imho musst du dazu ein einfaches Item Template (ControlTemplate) schreiben.
Dann kannst du den ToolTip überschreiben und einen ImageViewer reinetzen.

mfg
SeeQuark

25.03.2009 - 19:41 Uhr

Den Cast kannst du mit legalisieren wenn du einen operator dafür schreibst.
Aus dem Kopf etwa so:

public static explicit operator CustomClientSocket(Socket s) {
    return s as CustomClientSocket; // oder wie die Umwandlung auch immer verlaufen soll
}

Einen eigenen Konstruktor dafür wäre zwar auch denkbar, aber du wolltest es ja so haben.
Wenn du aus dem explicit ein implicit machst, brauchst du das "(CustomClientSocket)" gar nicht mehr angeben.
Imho solltest du den impliziten cast aber nur verwenden, wenn die Umwandlung ohne iIformationsverlust zu und hergeht.

mfg
SeeQuark

25.03.2009 - 15:18 Uhr

Visual Studio 2005 kann man mindestens "nachrüsten".
Aber Visual Studio 2003 imho nicht...

Warum möchtest du inbedingt Visual Studio 2003 dazu verwenden?
Ev. kannst du nebenbei die VS08 EE verwenden.
Ideal ist das natürlich nicht.
Möglich ist WPF übrigens auch erst ab Windows XP.

Die Lektüre Anwendung = Code + Markup wollte ich auch erst kaufen, aber bei den Amazonbewertungen ist sie relativ schlecht abgeschnitten.

mfg
SeeQuark

25.03.2009 - 14:40 Uhr

Ich kann das zwar nicht erklären, aber ohne dein HorizontalScrollBarVisibility=(&quot;Hidden&quot;){darkred} sollte es funktionieren.

mfg
SeeQuark

25.03.2009 - 13:44 Uhr
  1. das "eine" und "alle" vom einleitenden Satz ist generell überdenkungs würdig.

Ich finde das generell nicht besonders gut.

Manchmal kann es schon Sinn machen, eigene Exceptions zu schreiben aber ich finde, wenn schon Exceptions, bspw. um eine Verbindung zu öffnen schon vorhanden sind sollte man auch diese verwenden.

Wenn wirklich ein eigener Exceptionstyp gebraucht wird, könnte man erwägen diesen zu schreiben.

@steven: Da diese Sachen sowieso meistens IDisposable implementieren könntest du sie einfach mit using umschliessen.
Dispose bzw. Close wird dann auf jeden Fall aufgerufen, egal ob eine Exception geworfen wurde oder nicht.
Die Exception wird dagegen weitergeleitet.
Siehe dazu Dispose implementieren und verwenden

mfg
SeeQuark

25.03.2009 - 13:24 Uhr

Geht aber nicht. Zeigt nichts an. Warum nicht? Was fehlt?

Geht die MessageBox überhaupt auf?

Wenn nein, solltest du den Event noch einmal im Designer (oder, falls du den nicht verwendest von Hand) registrieren.

Also von Hand etwa so (ungetestet):

TabControl1.Selecting += TabControl1_Selecting;

Im Designer musst du bei den Events (gelber Blitz) unter dem Selecting-Event deine Methode auswählen.

He, du verwendest ja das Beispiel aus der MSDN
Da steht das in folgendem Satz:

Stellen Sie anschließend sicher, dass der Ereignishandler dem Selecting-Ereignis zugeordnet ist.

mfg
SeeQuark

25.03.2009 - 13:14 Uhr

Hallo.

Wenn du den gesamten string auf bestimmte Buchstaben überprüfen willst, solltest du das Pattern mit ^$ umschliessen.

Bezüglich der Syntax von RegEx kann ich dir das [Artikel] Regex-Tutorial empfehlen.
Zum Testen empfiehlit sich das On-the-fly Regex-Tester: Regex-Lab.
Das vereinfacht die Arbeit mit RegEx extrem.

mfg
SeeQuark

24.03.2009 - 21:50 Uhr

Andere Lösungsansätze:
Du kannst entweder das Resize-Event der Form dazu verwenden die Steuerelemente "von Hand" zu resizen oder du steckst den Button in ein TableLayoutPanel.
Wenn du aussenrum je eine Zelle mit einer relativen Breitenangabe und in der Mitte eine mit einer absoluten Breitenangabe machst, sollte das Ziel auch erreicht sein.

mfg
SeeQuark

24.03.2009 - 21:47 Uhr

Du kannst den ListView in einen Grid stecken und mit dem GridSplitter die Grösse der "Zelle" zu ändern.

mfg
SeeQuark

24.03.2009 - 13:12 Uhr

Ich würde in solchen Sachenn immer erst googeln und in Codproject nachschauen.

Meinst du so was in der Art (in den Links versteckt)?

mfg
SeeQuark

23.03.2009 - 19:15 Uhr

Wie kann man eigentlich direkt auf einen Beitrag verlinken ?

Kam von herbivore hier mal als Vorschlag: Beitrag verlinken

Du musst beim

Heute, 19:08

einfach auf das Bild klicken.

(Ich habs bis vor kurzem noch mit der Baumstrukturanzeige gemacht)

mfg
SeeQuark

23.03.2009 - 18:48 Uhr

Meinst du so was wie im Screenshooter V2T?
Da ist der SourceCode dabei, aber reines Copy'n'Paste kannst du auch hier nicht machen.

mfg
SeeQuark

22.03.2009 - 14:19 Uhr

Hallo tonka

Sicher reicht das!

Hier etwas Code:

public partial class DialogForm : Form
{
    public DialogForm()
    {
        // Eigene Einstellungen
        this.Text = "Test Form (Sollte bei ESC beenden)";
        this.Padding = new Padding(10);

        // TextBox initialisieren
        this.Controls.Add(new TextBox
        {
            Dock= DockStyle.Fill,
            Multiline=true,
            TabIndex=0,
            Name="FocusKlauTextBox"
        });

        // KeyPreview: Schnappt sich alle KeyDown-Events als erstes
        this.KeyPreview = true;
        this.KeyDown += (s, e) =>
        {
            if (e.KeyCode == Keys.Escape)
                this.Close();
        };
    }
}

Und das funktioniert.

Dafür ist KeyPreview ja gerade da, dass man das nicht mit allen Controls machen muss.

Das Problem ist sonst, das wenn der Focus z.B. auf einer Textbox liegt, nur das keydown-event der textbox gefeuert wird, und nicht die des Forms. Wie du an meinem Gegenbeispiel siehst, wird das durch die KeyPreview beseitigt =).

mfg
SeeQuark

22.03.2009 - 12:22 Uhr

Nicht direkt...

Aber mit KeyPreview = true alle Tastaturanschläge abfangen und falls Esc die Form schliessen.
Geht halt nicht nur rein im Designer.

mfg
SeeQuark

21.03.2009 - 20:59 Uhr

Wie kann man die Aktuellen Koordinaten des Panels abfragen

Entweder hast du das noch nicht ganz verstanden, was du kopiert hast oder nur etwas unglücklich formuliert:
Dein Panel hat immer noch die gleichen Koordinaten wie vorher.

Die :rtfm: MSDN sagt zur [Rendertransform](http://msdn.microsoft.com/de-de/library/system.windows.uielement.rendertransform.aspx):

Bei einer Rendertransformation wird keine Layoutgröße erneut generiert, und es werden keine Größeninformationen gerendert. Rendertransformationen sind i. d. R. zum Anwenden von Animationen oder eines temporären Effekts auf ein Element bestimmt.

Also solltest du bei beenden der Animation ([Completed-Event](http://msdn.microsoft.com/de-de/library/system.windows.media.animation.timeline.completed.aspx)) die entgültige Variable setzen.

Zu deiner Frage:
Direkt zugreifen kannst du mit

(this.ausfahren.RenderTransform  as TranslateTransform).X

Die Frage ist, was es dir nützt.
Eine "IsAnimated-Property" existiert imho nicht. Die Möglichkeit die du möchtest wäre, auf den Wert der RenderTransform zuzugreifen, eine andere einen boolschen Flag zu setzen.

Warum willst du eigentlich zwischen aus- und einfahren unterscheiden?
M.E. ist das doch belanglos, weil der einzige Ort, in dem du das wissen musst ist am Ende der Animation ist.
Und was da passiert, weist du sowieso beim definieren der Animation zu.

mfg
SeeQuark