Verfasst von Björn unter C#
Ich habe ein Dictionary nach folgendem Schema:
var dic = new Dictionary<string, string>()
{
{"de", "Deutsch"},
{"en", "Englisch"}
};
Die Werte möchte ich in einer ComboBox haben, die Values als anzuzeigenden Text, die Values soll er mir im Code zurückgeben. Ein Dictionary kann man jedoch nicht direkt als DataSource binden. Da die Lösung selbst bei Google etwas versteckt ist, hier die Lösung:
combobox1.DataSource = new BindingSource(dic, null);
combobox1.DisplayMember = "Value";
combobox1.ValueMember = "Key";
Und schon werden alle Einträge aus dem Dictionary angezeigt
(via Mad Props)
Ich habe ein Dictionary nach folgendem Schema:
[csharp]
var dic = new Dictionary<string, string>()
{
{"de", "Deutsch"},
{"en", "Englisch"}
};
[/csharp]
Die Werte möchte ich in einer ComboBox haben, die Values als anzuzeigenden Text, die Values soll er mir im Code zurückgeben. Ein Dictionary kann man jedoch nicht direkt als DataSource binden. Da die Lösung selbst bei Google etwas versteckt ist, hier die Lösung:
[csharp]
combobox1.DataSource = new BindingSource(dic, null);
combobox1.DisplayMember = "Value";
combobox1.ValueMember = "Key";
[/csharp]
Und schon werden alle Einträge aus dem Dictionary angezeigt :)
(via Mad Props)
Verfasst von Björn unter C#
Grad bestimmt 20 Minuten bei der Fehlersuche drauf gegangen. Folgender Code:
List<int> _list = new List<int>();
_list.Add(1);
_list.Add(2);
_list.Add(3);
_list.Add(4);
for(int i = 1; i <= 3; i++) {
int x = _list[i];
_list.Remove(x);
}
Mein Code war natürlich nicht mit Integerwerten. Ich musste noch ein paar andere Sachen machen, daher war ein RemoveRange() nicht möglich.
Nun wer findet den Fehler?
Ich liste es einfach mal auf:
Durchlauf: 1 - Lösche Element 1 - Rest 2
Durchlauf: 2 - Lösche Element 2 - Rest 1
Durchlauf: 3 - Lösche Element 3 - Rest 0
Beim letzten Durchlauf wird er immer Probleme kriegen. Das Element gibt es nicht mehr. Durch Remove() rücken die Elemente in der Indizierung nach.
Es müsste also heißen:
Durchlauf: 1 - Lösche Element 1 - Rest 2
Durchlauf: 2 - Lösche Element 1 - Rest 1
Durchlauf: 3 - Lösche Element 1 - Rest 0
oder in C#-Code:
for(int i = 1; i <= 3; i++) {
int x = _list[1];
_list.Remove(x);
}
Vor allem wenn man in den Debugger schaut, kamen da merkwürdige Werte raus. 
Ich sehe, dass die Methode “DeleteEntries()” mit dem Count-Parameter 2 aufgerufen wird, oben zeigt mir der Debugger aber 1 an. Liegt daran, dass in der Liste bereits ein Element entfernt wurde. Somit ist also, wenn man es genau nimmt, beides richtig.
Grad bestimmt 20 Minuten bei der Fehlersuche drauf gegangen. Folgender Code:
[csharp]
List<int> _list = new List<int>();
_list.Add(1);
_list.Add(2);
_list.Add(3);
_list.Add(4);
for(int i = 1; i <= 3; i++) {
int x = _list[i];
_list.Remove(x);
}
[/csharp]
Mein Code war natürlich nicht mit Integerwerten. Ich musste noch ein paar andere Sachen machen, daher war ein RemoveRange() nicht möglich.
Nun wer findet den Fehler?
Ich liste es einfach mal auf:
[plain]
Durchlauf: 1 - Lösche Element 1 - Rest 2
Durchlauf: 2 - Lösche Element 2 - Rest 1
Durchlauf: 3 - Lösche Element 3 - Rest 0
[/plain]
Beim letzten Durchlauf wird er immer Probleme kriegen. Das Element gibt es nicht mehr. Durch Remove() rücken die Elemente in der Indizierung nach.
Es müsste also heißen:
[plain]
Durchlauf: 1 - Lösche Element 1 - Rest 2
Durchlauf: 2 - Lösche Element 1 - Rest 1
Durchlauf: 3 - Lösche Element 1 - Rest 0
[/plain] oder in C#-Code:
[csharp]for(int i = 1; i <= 3; i++) {
Verfasst von Björn unter C#
Golo Roden erwähnte es bereits in den Kommentaren, daher möchte ich noch mal genauer darauf eingehen.
Dazu erstelle ich eine Solution in Visual Studio 2010 mit einer Konsolenapplikation, welche ich “DefaultValues” nenne. Mehr >
Golo Roden erwähnte es bereits in den Kommentaren, daher möchte ich noch mal genauer darauf eingehen.
Dazu erstelle ich eine Solution in Visual Studio 2010 mit einer Konsolenapplikation, welche ich "DefaultValues" nenne.
Die alte Schreibweise
Die Schreibweise unter C#3.0 mit Überladung wäre also in etwa so:
[csharp] public class Program
{
static void Main(string[] args)
{
AddValues("Ich bin ein", "String");
Console.WriteLine(_value);
AddValues("Ich bin ein", "String", true);
Console.ReadLine();
}
public static string _value;
public static void AddValues(string value1, string value2)
{
AddValues(value1, value2, false);
}
public static void AddValues(string value1, string value2, bool output)
{
_value = string.Format("{0} {1}", value1, value2);
if(output)
Verfasst von Björn unter C#
Gestern bin ich mal wieder über das selbe Problem wie damals gestoßen. Ich hab es damals nicht weiter erläutert. Und zwar sollte auf Knopfdruck eine Form erscheinen, welche über den ganzen Bildschirm geht, womit der Benutzer interagieren kann. Im Prinzip bestand die Form nur aus einer PictureBox und er sollte dort einen Bereich auswählen.
Lasse ich mir die Form per Show() anzeigen habe ich keine Probleme, per ShowDialog() hängt er jeweils 4 Sekunden (geschätzt).
Diese 4 Sekunden reichen aber dem normalen Benutzer schon aus, um sich darüber zu beschweren.
Gelöst habe ich es wieder einmal mit einem Show() und einen Closed-Event. Zusammen mit TopMost hatte ich den gewünschten Effekt. Erklären kann ich es mir dennoch und vor allem immer noch nicht.
(Wenn Interesse besteht, lade ich mal eine Beispielsolution hoch).
Gestern bin ich mal wieder über das selbe Problem wie damals gestoßen. Ich hab es damals nicht weiter erläutert. Und zwar sollte auf Knopfdruck eine Form erscheinen, welche über den ganzen Bildschirm geht, womit der Benutzer interagieren kann. Im Prinzip bestand die Form nur aus einer PictureBox und er sollte dort einen Bereich auswählen.
Lasse ich mir die Form per Show() anzeigen habe ich keine Probleme, per ShowDialog() hängt er jeweils 4 Sekunden (geschätzt).
Diese 4 Sekunden reichen aber dem normalen Benutzer schon aus, um sich darüber zu beschweren.
Gelöst habe ich es wieder einmal mit einem Show() und einen Closed-Event. Zusammen mit TopMost hatte ich den gewünschten Effekt. Erklären kann ich es mir dennoch und vor allem immer noch nicht.
(Wenn Interesse besteht, lade ich mal eine Beispielsolution hoch).
Verfasst von Björn unter C#
Aktuell arbeite ich an eine kleinen Applikation, welche ich “File Transfer Planer” getauft habe. Mit dieser wird es möglich sein, zeitgesteuert Dateien auf einen FTP zu schieben oder eben herunter zu laden.
Das Backend steht zum Teil, einen Teil der GUI ebenfalls, daher mal ein paar Screenshots.
Die GUI ist nicht mehr ganz so aktuell. Aktuell bin ich mir noch nicht so sicher, wie ich die Daten speicher, momentan tendiere ich dazu, die Daten als XML-Datei auf der Platte zu speichern.
Aktuell arbeite ich an eine kleinen Applikation, welche ich "File Transfer Planer" getauft habe. Mit dieser wird es möglich sein, zeitgesteuert Dateien auf einen FTP zu schieben oder eben herunter zu laden.
Das Backend steht zum Teil, einen Teil der GUI ebenfalls, daher mal ein paar Screenshots.
Die GUI ist nicht mehr ganz so aktuell. Aktuell bin ich mir noch nicht so sicher, wie ich die Daten speicher, momentan tendiere ich dazu, die Daten als XML-Datei auf der Platte zu speichern.
Letze Wortmeldungen