Danke für die Antworten.
Nicht der Resize-Mechanismus ansich ist zu aufwändig, sondern einer meiner Implementierungen. Ein UserControl zeichnet mit GDI+ und updated sich, wenn es in der Größe geändert wird. Und das ist aufwendig....
Ich kann leider keinen Unterschied zwischen SizeChanged und Resize erkennen. Beide kommen immer hintereinander.
Und MouseDown/Up klappt nicht. Man bekommt kein Event, wenn man den Rahmen anklickt
Ich habe einen Workaround mit einem Timer. Ich starte im OnResize den Timer jedes mal neu. Im Tick-Eventhandler wird dann das Neuzeichnen mit GDI+ ausgeführt. Das klappt, ist aber sicherlich nicht das eleganteste...
eigentlich ist es besser die initialisierung und verarbeitung der Daten im Formular selbst zu machen.
Wenn daten für das Formular notwendig sind, dann übergebe diese im Konstruktor.
Dort verarbeite sie.
Wenn du Daten wieder abfragen willst, füge den Formular eine entsprechendes Property oder Methode hinzu.
Beispiel:
public partial class DialogToDisplaySomething : Form
{
public string SelectValue
{
get
{
if (listBox1.SelectedIndex == -1)
return String.Empty;
return listBox1.SelectedItem.ToString();
}
}
public DialogToDisplaySomething(List<string> availableValues)
{
InitializeComponent();
listBox1.DataSource = availableValues;
}
}
der aufruf würde dann so aussehen:
public string DisplayValues()
{
List<string> availableValues = new List<string>();
availableValues.Add("Hello");
availableValues.Add("guys");
DialogToDisplaySomething f = new DialogToDisplaySomething(availableValues);
if (f.ShowDialog() == DialogResult.OK)
return f.SelectValue;
return String.Empty;
}
das ist dann etwas besser gekapselt und du machst keine Formulare von den Inhalten in den Klassen abhängig.
Auf diesen Formular ist nun eine Listbox drauf. Was ist, wenn dein Chef ankommt, und möchte dort gerne eine ComboBox haben.
Im beispiel von hilf sähe das so aus, dass man alle aufrufe des Formulars ebenfalls ändern muss. In meinem Beispiel spielt die Art und Weise der Anzeige keine Rolle.
AndreasW schrieb:
wenn du ein vorhandenen Webservice ansprechen willst, brauchst du ja nur ein Proxy zu generieren.
Die WSDL ist der Vertrag zwischen Webservice und aufrufende Anwendung. Was du machen musst, ist diesen Vertrag in Code umzusetzen. Dafür gibt es Tools.
WSDL.exe ist dafür bestens geeignet.
Diesen Proxy bindest du bei dir im Projekt ein und setzt dann nur noch die URI zum Service.
Im Buch won MicrosoftPress werden diese Tools auch noch erklärt.
ChrisPlusPlus schrieb:
Hallo!
unsafe
{
Point myPoint = new Point(1, 1);
void* myFirstPointer = &myPoint;
Point ret = (Point)myFirstPointer; // das und viele andere varianten
// schlagen fehl ...
}
Weiß jemand, wies richtig geht, oder bin ich mit dem void* auf dem falschen Dampfer?
Ja, du bist mit void aufm falschen Dampfer
unsafe
{
Point myPoint = new Point(1, 1);
Point* myFirstPointer = &myPoint;
Point ret = *myFirstPointer;
}
Hallo!
this.SetStyle(ControlStyles.UserPaint, true);
funtioniert wenn man ein Projekt vom Typ Windows-Anwendung hat.
Bei dem von mir verwendeten Projekttyp für Geräteanwendungen
gibt es jedoch den Kompilerfehler:
Keine Definition für SetStyle gefunden.
Weiß jemand, ob es eine vergleichbare Methode für Geräteanwendungen
gibt?
Bye, Lothar.
Servus,
du könntest doch die Dateien in ein DataSet laden und dann mit einem DataView z.B. Sortieren, Austauschen etc. oder du liest beide Dateien ein und tauchst die Informationen aus. Die CSV Datei ist ja eine Treenzeichen getrennte Datei.
Hier ein Ansatz in Pseudo Code:
int PositionDat1 = 1 // Spalte in erste Datei
int PositionDat2 = 3 // Spalte in zweiter Datei
string zwischenspeicher;
solange (datei1 != ende && datei2 != ende)
{
string zeile1 = LeseZeile(datei1);
Array1[] array1 = zeile1.Split(';');
string zeile2 = LeseZeile(datei2);
Array2[] array2 = zeile2.Split(';');
array1[PositionDat1] = array2[PositionDat2];
zwischenspeicher += array1.ToString() + CR + LF;
}
SchreibeInDat3(zwischenspeicher);
Sowas in der Art...
mfg
Hellsgore
Ok, ich sehe grad, das ist zu viel des Guten. Ich möchte kein Visual Studio Plugin schreiben, sondern nur den Designer für mein eigenes Control festlegen. Das sieht dann so aus:
[Designer(typeof(CompanyCategoryTreeDesigner))]
public class CompanyCategoryTree : CheckBoxTree {
Der CompanyCategoryTreeDesigner erweitertert den Designer, der vom CheckBoxTree kommt. Dabei redefiniere ich ein paar Methoden, unter anderem validiere ich dort die zur Design-Zeit zugewiesenen Properties.
Im Moment, weil ich nicht in die Taskliste schreiben kann, male ich eine Meldung über das Control drüber, so dass man es im GUI-Designer sieht. Ich hatte gehofft, dass man stattdessen auch eine Fehlermeldung in die Taskliste schreiben kann, sozusagen auf höherer Ebene und nicht als VS-Plugin. Wenn das nicht möglich ist, werde ich es wohl so lassen. Der höhere Aufwand für das Plugin lohnt sich jetzt nicht.
Hallo someone
Danke für deine Antwort.
Direkt mit .NET scheint es tatsächlich nicht zu funktionieren. Ich habe inzwischen aber etwas mit der gdi32.dll und GetFontUnicodeRange herumprobiert. Damit sollte es funktionieren.
Hitsch
Was liefert den UI.Anmelden für ein Ergebnis zurück? Könnte man diesen Rückgabewert nicht auch als Parameter Deiner Methode ZeigeMaske verwenden und dann zuweisen?
Und wozu willst Du ^ ausgeben? Wenn Du's in der Tastatur eingibst, kommt das allein auch nicht an.
Nur in Verbindung mit einer anderen Taste.... diese andere Taste könnte auch <Space> sein...
Was gefällt Dir denn an TreeView nicht?
Willst Du eine Lösung basierend auf ArrayList machen oder was ganz freies?
Was ganz freies wäre: Erstelle eine Klasse "Ordner". Diese enthält einen Verweis auf den übergeordneten Ordner. Gibts den nicht, befindet sich der Ordner im Stammverzeichnis.
Außerdem hat "Ordner" die Info auf das Vorgänger- und Nachfolge-Ordner-Objekt im gleichen Ordnerlevel, sofern es sie gibt.
Und zuletzt: Ordner hat die Info auf das erste Ordner-Objekt unterhalb seiner Ebene.
Damit kannst Du mit Hilfe eines "Ordner" Objekts auf alle anderen Ordner zugreifen und bist dynamisch unterwegs.
Wenn's zusätzlich um Zugriffs-Performance geht, legst Du eine Klasse an, die aus Ordnername und Ordnerobjekt besteht (plus ggf. weitere benötigte Merkmale). Diese Klassen werden in einer ArrayList angelegt und ist dann entsprechend sortierbar. Hast Du ein Objekt in der ArrayList gefunden, kennst Du dann auch gleich das "Ordner"-Objekt und kannst dort weiternavigieren...
Shaveman schrieb:
Morgen zusammen,
ich bin schon seid einiger Zeit auf der Suche nach einer Lösung für mein Problem und hoffe das mir hier geholfen werden kann!
Ich bin zur Zeit dabei einen eigenen Installer zu programmieren habe mir entsprechend meine Forms zusammengebastelt. Jetzt mein Problem, ich will die Forms nacheinander, durch klicken auf einen "next"-Button durchlaufen lassen. Das vorherige Fenster sollsich schliessen. bei der ersten Form geht das ganz wunderbar mit "visible = false" danach allerdings niiht mehr.
Wie bekomme ich es jetzt hin das sich die anderen Fenster auch verstecken oder schliessen?
Wäre über eure Hilfe dankbar! Gruß Shaveman
Entweder du versteckst die Form mit:
//Altes Fenster verstecken
this.Hide();
//neues anzeigen, vorher solltest du es aber erzeugen^^
neusesForm.Show();
oder du schließst die Form
//1.Möglichkeit
this.Close();
//2.te Möglichkeit
this.Dispose();
MFG
Kurz gesagt für plattformunabhängige Entwicklung brauchst Du ein Framework, welches jemand anderes für mehrere Plattformen gebaut hat (angenommen Du willst ein und dasselbe Coding für mehrere Plattformen). Das gilt auch für .NET und Java, nur dass hier der Intermediate Code portabel ist, bei C++ nur der Quellcode.
Java gibt es für so gut wie jede Plattform, wurde aber aus bestimmten Gründen abgelehnt.
.NET gibt es für Windows. Implementationen für Linux (MAC?), namentlich Mono existieren zwar, bilden aber zumindest GUI-technisch nicht alles ab.
Für C++ fällt mir da spontan Qt ein, ein Framework für Windows, Mac, Linux, welches sich auch in die gängigen Entwicklungsumgebungen einklinken kann (wenn man's kauft).
Ein anderes denkbares Beispiel wär wxWidgets, wobei ich da nicht weiss obs das für Mac gibt.
Und zu dem immer wiederkehrenden Flamewar kann ich nur sagen: Unfähige Programmierer können auch in C++ langsame Software schreiben. (Und das obwohl ich kein Java-Entwickler bin)