Laden...

Forenbeiträge von royal Ingesamt 77 Beiträge

25.06.2011 - 20:32 Uhr

Ohje,

ich verzweifel langsam... ich bekomme es einfach nicht gebacken...

die ListBox bindet die (Binding)List. Diese Liste besteht aus Klassen.
Adde oder Delete ich Klassen in der Liste wirds auch richtig angezeigt.
Ändere ich aber Werte innerhalb der Klasse (über DataBindings, was auch klappt) müsste sich die ListBox auch aktualisieren, da ja die Liste als DataSource gebindet wurde. Tut sie aber nicht. Die Klassen-Properties wurden zwar geändert, die Änderung findet sich in der Liste aber nicht wieder.

25.06.2011 - 18:24 Uhr

Hallo zusammen,

ich habe folgendes Problem:

Ich habe Daten an eine ListBox gebunden. Wird die zugrundeliegende Datenquelle geändert, dann ändern sich die Daten nicht in der ListBox. Die Datenanzeige in der ListBox ist erst richtig, wenn ich nach der Änderung der Daten die DataSource auf null setze und das Binding neu einstelle.
Gibt es da auch noch eine andere Möglichkeit?

02.03.2011 - 22:48 Uhr

okay, vielen dank für die antwort! 😃

27.02.2011 - 11:27 Uhr

verwendetes Datenbanksystem: MSSQLServer Express Edition

Hallo zusammen,

da ich meine Anwendung etwas schneller gestaltet wollte bin ich auf die Idee gekommen, auch den Datenbankzugriff zu parallelisieren. Ich lese aus meiner Datenbank Daten aus und speicher sie in einer List<ClassX> Liste.

Nun dachte ich mir, ich weiß, wie viele Elemente die List am Ende beinhalten soll und initialisiere sie erstmal mit

foreach (ClassY element in AndereListe)
{
     Liste.Add(null);
}

Danach habe ich versucht mit der Task-Parallel-Library Parallel.ForEach zu verweden und für jedes element einen Datenbankzugriff zu starten. Es kommt dann aber nach langer Zeit die Meldung, dass es einen Timeout gibt und es evtl. daran liegen könnte, dass der Connection-Pool ausgeschöpft ist. Stelle ich Max Pool Size aber auf einen Wert, der größer als die Anzahl der Datenbankzugriffe ist, dann scheint er in einem lock gefangenzusein, jedenfalls macht er gar nichts mehr und der thread ist blockiert.

Macht es überhaupt Sinn, Datenbankzugriffe zu parallelisieren oder sollte man das direkt sein lassen? Und falls es Sinn macht, wie stelle ich es am besten an?

Vielen Dank

02.06.2010 - 16:37 Uhr

Jo, vielen Dank, hab AllowUserToAddRows auf False gestellt und nun funktionierts.
Frag mich nur gerade warum der zusätzlich Zeilen einfüngt, nur weil er es dürfte. Es wird ihm ja nicht gesagt, dass er ne neue (leere) Zeile hinzufügen soll. Weder mein Code, noch ich selbst.

01.06.2010 - 02:25 Uhr

Hallo zusammen,

ich fummel leider schon seit Stunden an folgendem Problem:

Ich erstelle einen DataTable (dt) und füttere diesen mit Daten. Dies tue ich über DataRow dr = dte.NewRow(), Befüllen der DataRow mit Daten und anschließend dt.Add(dr);

Da ich mir die Daten des DataTables nun in einer DataGridView anzeigen lassen möchte verwende ich dgv.DataSource = dt;

Er zeigt mir nun auch alle Daten des DataTables im DataGridView an, allerdings fügt er ganz unten eine Leerzeile ein. Wieso tut er das und wie schaffe ich es, dass er mir die Daten ohne zusätzliche Leerzeile anzeigt?

Vielen Dank!

03.05.2010 - 21:15 Uhr

tatsächlich, nun funktioniert es!

vielen Dank 😃

03.05.2010 - 16:55 Uhr

ist eine Methode die am Ende des Konstruktors der Form aufgerufen wird!

03.05.2010 - 13:18 Uhr

Hallo zusammen,

vermutlich wieder eine einfache Frage, aber ich steh mal wieder auf dem Schlauch.

Ich habe einen DataTable (dt) befüllt, eine BindingSource erstellt (bs) und ein DataGridView (fdgv).

Nun folgender Code:


            BindingSource bs = new BindingSource();

            bs.DataSource = dt;

            fdgv.DataSource = bs;
            fdgv.Columns[0].Visible = false;

            for(int i = 0; i < fdgv.Rows.Count; i++)
            {
                if ((int)fdgv.Rows[i].Cells[6].Value < 0)
                {
                    fdgv.Rows[i].DefaultCellStyle.ForeColor = Color.Red;
                }
            }

Die Daten werden zwar korrekt in dem DataGridView angezeigt, jedoch wird bei Zeilen, bei denen der Wert der 7. Spalte kleiner als 0 ist, die Schrift nicht in rot angezeigt. Wieso nicht? if-Bedingung ist stellenweise auf jeden Fall true, das habe ich schon getestet, aber trotzdem ändert er nicht die Farbe.

02.05.2010 - 14:10 Uhr

ah, das ergibt natürlich sinn. nun funktionierts auch!
schon wieder was dazu gelernt. vielen dank!

02.05.2010 - 11:19 Uhr

Habe nun das Click event im Parent umdeklariert in "protected virtual"
und im Child in "protected override",

nun führt er das Event/die Methode beim Click im Child aber 2mal aus :S

02.05.2010 - 01:41 Uhr

Hallo Leute,

habe eine Windows-Form Child, die von Parent erbt.
Parent besitzt den Button "aendern".
Per MS VS Designer hab ich das Click-Event sowohl bei Parent, als auch bei Child hinzugefügt. Bei Druck des aendern-Buttons bei Child wird nun aber


private void fbtn_aendern_Click(object sender, EventArgs e)
{
   // ...
}

der Parent-Form ausgeführt (Beide Eventmethoden haben denselben NAmen und dieselben Parameter). Es soll aber das Event/ die Methode des Child-Forms ausgelöst werden. Wie erreiche ich dies?

Hab schon versucht im Child-Form ein "new" nach "private" zu setzen, ging dann aber immer noch nicht.

Danke im Voraus.

12.08.2009 - 00:50 Uhr

Mhm, ich wüsste jetzt nicht wie genau das aussehen sollte, sagt mir nichts. Aber ich habs mit Hilfe des obigen Links auch sehr einfach implementiert was ich haben wollte. Ist nun auch viel übersichtlicher, da ich nicht mehr Unmengen von Radio Buttons auf meiner Form habe.
Vielen Dank jedenfalls an euch 😃

11.08.2009 - 01:35 Uhr

Ja, sowas meine ich! 😃
Super, danke!

11.08.2009 - 01:13 Uhr

Guten Abend zusammen,

mein Anliegen ist folgendes: Ich möchte eine ComboBox haben, die verschiedene Strings enthält, bspw. {Apfel, Birne, Banane usw.}. Wenn ich ein Item aus der Box auswähle möchte ich, dass ich über SelectedItem nicht den String "Apfel" erhalte, sondern die Enumeration Obst.Apfel.

Das ganze könnte man zwar über SelectedIndice lösen, aber jedesmal wenn ich ein Item nicht am Ende hinzufüge müsste ich ja den Code jedesmal umändern um die Indices anzupassen.

Ich hoffe ihr versteht was ich meine! Wie mache ich das?

Viele Grüße!

02.06.2009 - 21:21 Uhr

Noch ne blöde Frage: Wie "erstelle" ich denn die Form?

durch


f_ergebnisse ergebnisse = new f_ergebnisse();

scheinbar noch nicht, okay, wahrscheinlich ist ergebnisse dann noch null.
Wenn ich aber noch nicht will, dass die Form direkt angezeigt wird, sondern erst nach dem durchlaufen der Schleifen, muss ich dann erst
ergebnisse.Show() ausführen und direkt danach ergebnisse.Hide(), oder gibt es da auch ne andere Lösung?

02.06.2009 - 20:10 Uhr

Hey Leute,

ich weiß zwar nicht, ob's jemanden interessiert aber ich schreib mal trotzdem wie es weitergeht, vllt hilfts ja auch anderen Anfängern wie meinesgleichen weiter, wenn sie das lesen.

Ich hab die Update-Methode nun in eine eigene Klasse gepackt. Dadurch ist es mir gelungen, dass er mir bei mehreren parallelen Jobs nicht die ProgressBarAnzeigen durcheinanderhaut. Denke es lag vorher daran, dass die ProgressBarAktualisierungs-Events immer für die gesamte Hauptform galten und somit alle ProgressBarForms aktualisiert wurden. Nun funktioniert es jedenfalls 😃

02.06.2009 - 12:17 Uhr

        private void fbtn_update_Click(object sender, EventArgs e)
        {
            f_progress progress = new f_progress();
            f_ergebnisse ergebnisse = new f_ergebnisse();
            progress.Show();

            this.InnereSchleifeBearbeitungStart += new InnereSchleifeBearbeitungStartHandler(progress.InnereSchleife_start_update);
            this.InnereSchleifeBearbeitungEnde += new InnereSchleifeBearbeitungEndeHandler(progress.InnereSchleife_ende_update);
            this.IndiceBearbeitungStart += new AeussereSchleifeBearbeitungStartHandler(progress.AeussereSchleife_start_update);
            this.AeussereSchleifeBearbeitungEnde += new AeussereSchleifeBearbeitungEndeHandler(progress.AeussereSchleife_ende_update);
            //this.ProgressBeginn += new ProgressBeginnHandler(progress.form_anzeigen);

            Thread thread_neu = new Thread(new ThreadStart(update));
            thread_neu.Start();
        }

Ich habe nun progress.Show() hinugefügt, nun blockieren beide nicht mehr. Davor hatte ich (nun auskommentiert) das Show() über den ProgressBeginn-Event gestartet.
Offenbar wurde die Form erst durch das Show() in dem neuen Thread erstellt.

Da er nun nicht mehr blockiert kann ich den update-Button auch mehrfahch drücken, jedoch haut der mir dann, wie ich an der ProgressAnzeige sehe einiges durcheinander und führt Berechnungen mit Werten durch die gar nicht vorgesehen waren -.- Da scheint dann wohl was mit der Synchronisierung schiefzulaufen.

Vielen Dank, dass ihr so geduldig mit mir seid, immerhin blockiert nun schonmal nichts mehr 😄

02.06.2009 - 11:37 Uhr

Ok, ich weiß zwar nicht, warum, aber den Teil habe ich wohl überlesen -.-

Wie dem auch sei, ich erstelle die ProgressForm nun im GUI-Thread, genauer gesagt beim Click auf den Button. Daraufhin binde ich die Bearbeitungsereignisse an die GUI und lasse Methoden zur Aktualisierung in der ProgressForm ablaufen. Nun zeigt er mir den Progress immerhin wieder richtig an und die Hauptform blockiert auch nicht, aber dafür blockiert die ProgressForm. Das verstehe ich nun nicht. Darüber hinaus schließt er die ProgressForm nach Ablauf der Schleifen, aber da ich kein Close() aufrufe dachte ich, dass sie offen bleiben müsste.

02.06.2009 - 02:21 Uhr

ja, mit der int-Übergabe klappts. Nun aber folgendes Problem.
Ich habe wie oben beschrieben die ProgressForm erstellt und sie wird auch geöffnet. nach dem Erstellen und öffnen binde ich wie die Ereignisse im Arbeitsthread an die ProgressForm:


        public void EventAnbindung(f_hauptfenster form)
        {
            form.InnereSchleifeBearbeitungStart += new InnereSchleifeBearbeitungStartHandler(InnereSchleife_start_update);
            form.InnereSchleifeBearbeitungEnde += new InnereSchleifeBearbeitungEndeHandler(InnereSchleife_ende_update);
            form.AeussereSchleifeBearbeitungStart += new AeussereSchleifeBearbeitungStartHandler(indice_start_update);
            form.AeussereSchleifeBearbeitungEnde += new AeussereSchleifeBearbeitungEndeHandler(indice_ende_update);
        }

Beginnt nun die äußere Schleife in meiner hauptform und wird dadurch AeussereSchleifeBearbeitungStart ausgelöst kommt er an dieser Stelle nicht weiter und ich bin in einem Deadlock gefangen.

02.06.2009 - 00:37 Uhr

ok, dann werde ich mir den mal anschaun 😃

zum casten:

In meiner Methode mit den Schleifen:

Thread thread_progress = new Thread(new ParameterizedThreadStart(ProgressFormErstellen));
            thread_progress.Start(new object[] { werte_list.Count });

Methode, die der Thread aufruft:


        public void ProgressFormErstellen(object indice_max)
        {
            f_progress progress = new f_progress((int)indice_max);

            progress.EventAnbindung(this);

            progress.Show();

            Thread.Sleep(Timeout.Infinite);

            progress.Close();
        }

Beim Casten meckert er, dass die Umwandlung ungültig ist. f_progress erwartet einen int-Wert.

02.06.2009 - 00:10 Uhr

Hey Leute, ich bin's leider nochmal, ich hab mich mittlerweile ein bisschen in Events und Threading eingelesen und bis auf die Synchronisation verstehe ich es auch ganz gut denke ich. Bevor ich zum Problem komme am besten was zum Aufbau des Programms:

Ich drücke auf nen Button, es wird ein Fenster mit 2 ProgressBars geöffnet und es wird eine doppelte Schleife (für jede ProgressBar eine Schleife (foreach List<Wert> blub in List<List<Wert>> und als 2. Schleife jeder einzelne "Wert")) gestartet in denen langwierige Operationen durchgeführt werden. Geht die Schleife eins weiter lasse ich mir die Form mit den ProgressBars per Events aktualisieren.

Vorher hat alles blockiert. Nun habe ich diese Button-Methode in einen eigenen Thread gepackt. Soweit so gut, nun blockiert meine Hauptform nicht mehr, aber die ProgressForm blockiert. Nun habe ich mir überlegt, dass ich die ProgressForm auch in einem eigenen Thread starten könnte. Dann die Bearbeitungsevents an die Form binden, die Form in Sleep.Infinite versetzen und nach dem Durchlauf aller Schleifen Interrupt und die Form schließen lassen. Scheitert irgendwie schon daran, dass ich scheinbar zu dumm bin den ParameterizedThreadStart zu benutzen. Ich übergebe einen int-Wert als object und kann diesen nicht als int casten.

Selbst wenn das klappen würde weiß ich nicht, wie ich zum Beispiel bei einem Klick auf den Abbruch-Button in der ProgressForm den Durchgang der schleifen beenden kann. Gut, ich könnte einen Event feuern, aber was für eine Methode sollte ich damit aufrufen die die Schleife beendet?

Ich bin ein wenig verwirrt wie man das alles in Einklang bringt. Mal von einer Synchronisation abgesehen, die immer 2 Berechnungen parallel laufen lässt. Aber eins nach dem andern, das kompliziertere nach dem einfachen.

Mir würde es vermutlich helfen, wenn ihr mir sagt, was ich in einzelnen Threads laufen lassen sollte und was ich dann über Events steuern sollte.

Zu der Synchronisation vllt später mehr, erstmal das zum Grundverständnis. Sorry für den langen Text und meine Unfähigkeit!

25.05.2009 - 23:25 Uhr

Vielen Dank für eure Antworten!

Bisher habe ich mich ja erfolgreich vor der Thread- und der Event- Programmierung (sofern diese nicht über das Visual Studio Ereignisfenster programmiert wurde) gedrücktm aber da komme ich wohl nun nicht drum rum. Ist aber auch nicht schlecht, dann lerne ich wieder was dazu. Werde mich die Tage mal genauer darin einlesen. Vielen Dank für eure schnelle Hilfe! 😃

@DiViP: genauso siehts aus mit der Schleife!

24.05.2009 - 22:58 Uhr

Hey Leute,

ich habe eine zusätzliche Form erstellt, die eine ProgressBar anzeigt, um mich zu informieren, wie weit er bei der Verarbeitung meiner Daten ist. Während der Anzeige kann ich aber weder das Fenster verschieben, noch kann ich den gerade erstellen "Abbrechen"-Button benutzen. Woran liegt es, dass er mir die ProgressBars richtig anzeigt, ich die Form aber ansonsten nicht verwenden kann?

danke!

22.04.2009 - 11:40 Uhr

Cool,

das mit der Transaction wusste ich auch noch nicht, bin leider noch blutiger Anfänger. Anfangs hab ich für die Anweisung 1:50 Min gebraucht, konnte dann durch rumtesten auf 1:27 kommen, aber mithilfe der Transaction brauche ich sogar nur noch ne Minute! Krass was man da alles rausholen kann, vielen Dank 😃

22.04.2009 - 00:40 Uhr

verwendetes Datenbanksystem: MSSQL Server 2008 Express

Hallo!

Gibt es die Möglichkeint, eine List<> in einem Insert Befehl zu verwenden oder muss man jeden List-Eintrag einzeln einfügen? Oder ginge es vllt mit einem String[] ??

Hab bisher nur gelesen, dass man ganze Spalten mit einer Select-Anweisung einfügen kann.

Vielen Dank!

18.04.2009 - 21:16 Uhr

vielen dank, werd mich mal direkt ans lesen machen 😃

18.04.2009 - 20:53 Uhr

hey leute,
ich verzweifel gerade ein wenig. das problem ist folgendes:

ich will mehrere strings aus dem internet ziehn. das ziehen der strings dauert in etwa so lange, vllt auch etwas weniger, als das spätere bearbeiten der strings.
problem ist nun folgendes:
wenn ich erst den string ziehe und dann erst den string bearbeite brauche ich doppelt soviel zeit als wenn ich beim bearbeiten des strings schon parallel den nächsten string lade, sodass dieser dann im anschluss direkt bearbeitet werden kann.

um eine durchgängige bearbeitung (ohne warten aufgrund des ladens) zu gewährleisten wäre es vermutlich sinnig, immer 5 strings parallel herunterzuladen.

die frage ist nun, wie ich das anstelle, dass er parallel zum bearbeiten immer für nachschub sorgt, die strings abspeichert und der reihe des ziehens nach bearbeitet?

hoffe ihr wisst, was ich meine 😃

11.04.2009 - 13:45 Uhr

Im Prinzip gibts 3 Dinge die ich mache:

  1. Die Zeitreihendaten komplett löschen und nochmal neu einfügen

  2. Die letzten x Datensätze der Zeitreihe aktualisieren, sprich überprüfen, ob die daten falsch waren und dann updaten, oder so belassen, falls sich die daten nicht geändert haben

  3. die gesamte zeitreihe auf fehler überprüfen, wie z.B. auf fehlende tage

ich denke ich werd jede zeitreihe einzeln vom server abfragen und bearbeiten.
wenn ich dann zeit dazu habe kann ich ja mal testen, ob es anders schneller gehn würde 😃

10.04.2009 - 19:46 Uhr

verwendetes Datenbanksystem: MS SQL Server 2005 Express

Hallo zusammen. Ich habe eine Performancefrage.

Und zwar habe ich eine Datenbank, in der verschiedeneZeitreihendaten in einer Tabelle gespeichert sind. Diese sind durch eine Id und einen DateTime Wert eindeutig identifizierbar.

Nun möchte ich die einzelnen Zeitreihen (insgesamt mehrere hundert, die jeweils ein paar tausend Datensätze haben können) mittels eines Programms bearbeiten lassen.

Ist es Performancemäßig günstiger, erstmal alle Zeitreihen per Select-Andweisung in einem DataTable zu speichern (könnten ein paar hundert MB, oder sogar ein GB an Speicherkapazität sein), dort dann nach den id's zu filtern und zu bearbeiten, oder ist es günstiger, die Zeitreihen nach und nach aus der Datenbank zu ziehn (Select einer einzelnen id, bearbeiten der daten, DataAdapter update durchführen, DataTable clearen und mit der nächsten id wieder befüllen)?!

Frage mich halt, ob es bei der großen Datenbank schneller geht die Zeitreihen separat zu beziehen, da die datenbank vielleicht schneller filtern kann, als ein riesen DataTable in c# zu durchforsten?! Andererseits werden die Daten im Arbeitsspeicher vllt schneller verwertet?

Hoffe es ist klar, was ich meine 😃 Vielen Dank!

06.04.2009 - 13:05 Uhr

Nun funktionierts auch!
Dachte eigentlich der Commandbuilder merkt, dass es um 2 Tables geht, aber falsch gedacht. Vielen Dank 😃

06.04.2009 - 12:42 Uhr

ah, okay, hab mir auch gerade überlegt, die Batchanweisung lieber auf 2 SqlCommands und damit 2 Dataadapter aufzusplitten und die Datatables danach manuell einem Dataset hinzuzufügen. Das sollte klappen, ich probiers mal eben aus. Danke schonmal!

06.04.2009 - 12:29 Uhr

verwendetes Datenbanksystem: SQL Server Express Edition 2005

Guten Morgen,

ich habe folgendes "Problem". Ich lese per SqlDataAdapter(Batch-Abfrage) 2 Tabellen meiner Datenbank in ein Dataset ein. Wenn ich daraufhin den SqlCommandBuilder verwende, dann updatet er mir den zweiten Table des DataSets nicht. Es scheint so, dass die Vom CommandBuilder gebildeten SqlCommands nur für den ersten Table gelten? Kann man das auch irgendwie umstellen oder muss ich mit eigene Update-Insert und Delete-Commands schreiben?

Sorry, habe erst vor einer Woche angefangen mich mit Sql auseinanderzusetzen. Vielen Dank!

14.09.2007 - 16:43 Uhr

ah, danke für den Tipp 🙂

14.09.2007 - 16:26 Uhr

Hallo!

Ich habe eine Form mit mehren Labeln und möchte deren Texte mit der Maus markieren und anschließend kopieren können. Ich finde bei den Label Properties keine Einstellung um die markierung zu aktivieren, übersehe ich da etwas? Oder muss ich das irgendwie über Events regeln?

Mfg,
royal

08.03.2007 - 17:32 Uhr

Ja stimmt, ich war zu gedankenlos. Vielen Dank, nu habe ich das Konzept dahinter verstanden!

08.03.2007 - 16:53 Uhr

Ach ich glaube jetzt verstehe ich das Ganze erst richtig. Ich lasse mir also eine Reihe von Zufalls-doubles erstellen. Diese speichere ich dann in einer List.

Wenn ich nun z.B. folgende Verteilung besitze:

W(X = 5) = 0.25, W(X = 3) = 0.5, W(X = 1) = 0.25,

dann kann ich eine Abfrage starten:

wenn die variable ≤ 0.25 ist, dann 5,
wenn die variable ≤ 0.5 ist, dann 3,
wenn die variable ≤ 1 ist, dann 1

, da die zahlen im Intervall [0; 1] gleichverteilt sind, sehe ich das richtig?

08.03.2007 - 16:13 Uhr

Hmm, das ist leider noch nicht das, was ich gesucht habe. Die Random-Klasse gilt nur für gleichverteilte Zufallsvorgänge, Mein Beispiel oben ist schlecht gewählt. Ich habe nämlich eine Verteilung vorliegen, deren Ereignisse alle unterschiedliche Wahrscheinlichkeiten besitzen. Prinzipiell möchte ich eine Monte-Carlo-Simulation vorfinden. Mal schaun, ob sich bei codeproject was dazu finden lässt!

08.03.2007 - 00:02 Uhr

Das ist ja super, ich guck mir das morgen mal in Ruhe an, danke dir, für die ganze Mühe die du schon mit mir hattest 😁

07.03.2007 - 23:22 Uhr

Guten Abend!

Sagen wir ich hätte eine faire Münze. Nun möchte ich dem PC nun sagen er soll die imaginäre Münze 1000-mal werfen und das Ergebnis (z.B. 1 für Kopf und -0,5 für Zahl)
in ein Array abspeichern. Wie programmiere ich so eine Zufallsvariable?

Vielen Dank,
royal

Tft

07.03.2007 - 23:02 Uhr

Das es mit ClientSize oder ClientRectangle funktioniert wundert mich ja gar nicht.
Was mich wundert ist, dass die Abstände nach links und nach rechts nicht gleich groß sind, wenn ich Location 15 und die Breite des Buttons 70 betragen.

Oder wird bei der Size der Form auch noch der Rahmen mitberechnet, sodass der in der Form verfügbare Platz gar keine 100 Pixel beträgt?

Tft

06.03.2007 - 19:06 Uhr

Ich habe es nun hinbekommen. Im Design-Fenster hat er zwar alles richtig angezeigt, jedoch wurden nach der DPI-Umstellung automatisch Size und Location-Werte umgeändert. Hab nun alles adjustiert und es geht wieder.

Ich hätte jedoch noch eine andere Frage, die nichts direkt damit zu tun hat.
Sagen wie mal ich habe eine Form der Breite 100 und darin enthalten einen Button. Dieser Button hat einen Loacation-Width-Wert von 15. Wenn ich möchste, dass der Button nach beiden Seiteneinen Abstand von 15 Pixeln haben soll, dann muss die Breite des Bottons folglich 70 sein (100- 2*15). Wenn ich das jedoch so eingebe, dann ist der Abstand zum rechten Rand kleiner als zum linken Rand.

Wenn ich für das Resize-Event jedoch folgendes eingebe:


            fbtn_close.Location = new Point(15, 15);
            fbtn_close.Size = new Size(ClientRectangle.Width - 30,
                ClientRectangle.Height - 30);

und dann resize, dann scheints zu funktionieren und der Rand ist zu beiden Seiten gleich groß.

Tft

04.03.2007 - 20:57 Uhr

Also AutoSize steht auf false... Aber ich arbeite schon mit unterschiedlichen Schriftgrößen... im Design-Fenster wird alles richtig angezeigt, aber bei der Ausführung ist alles ne Ecke breiter und passt gar net mehr in die Form rein... nur die Form selbst hat die richtige Größe... Ich habe auch eingestellt, dass sich die buttons immer mit einem Abstand von 15 Pixeln zum Form-Rand befinden, wenn ich die Form-Größe zur Laufzeit änder... aber das passt nun auch nicht mehr... der Button geht über den Rand hinaus -.-

Was ist denn TableLayoutPanel?

Tft

04.03.2007 - 14:00 Uhr

Guten Tag!

Seitdem ich meinen Röhrenmonitor durch einen TFT-Bildschirm ersetzt habe und die DPI-Zahl verändert habe hat sich das Layout meiner Porgramme verändert. Obwohl die Buttons in dem "Visual"-Fenster schön nebeneinander sind und die locations und sizes richtig eingestellt sind ändert sich alles, wenn ich den code debugge... Die Buttons sind dann auf einmal zum Teil übereinander und auch die Größe der Elemente in der Form scheinen nicht mehr zu stimmen. Hat jemand eine Ahnung, woran das genau liegt und wie man es vernünftig beheben kann?

Danke im voraus,
royal

02.01.2007 - 05:44 Uhr

ich peils leider nicht direkt auf die schnelle... ich muss mir, glaube ich, erstmal was über schnittstellen durchlesen und eventuell auch delegeaten, damit habe ich mich bisher noch gar nicht befasst, aber ich danke schonmal für die angebotenen lösungen und werde es dann mit einbeziehen 🙂

31.12.2006 - 00:42 Uhr

es lässt sich damit aber nicht parallel auch die zweite list in gleicher weise sortieren oder?

22.12.2006 - 15:17 Uhr

ah, vielen dank, funktioniert 🙂

dachte irgendwie, dass das ergenis einer integer division automatisch ne double wird... da hab ich mich wohl geirrt 😁

22.12.2006 - 15:03 Uhr

Hallo...

Ich habe eine List<> einer Klasse, die wieder verschiedene Werte enthält. Unter anderem eine DateTime- Variable. Nun hätte ich gerne, dass die List nach der DateTime sortiert wird. Kann ich mit der Sort-Methode irgendwie bestimmen, nach welcher Variablen in der Klasse sortiert werden soll, oder muss ich dafür selbst eine Methode schreiben?. Da ich eigentlich zwei Lists habe, die in der gleichen Reihenfolge sortiert werden soll, wäre es nicht schlecht, wenn der biede Lists gleichzeitig sortieren würde, aber dazu muss ich dann selbst eine Methode schreiben oder?

Wollte nur wissen, ob's auch so geht, oder ich selbst was schreibne muss, was auch kein Problem wäre 🙂

Achja, ich hab noch ne Frage, bei der mich gerade alle guten Geister verlassen, ich versteh einfach nicht, warum folgendes nicht geht:


            MessageBox.Show(int1.ToString()); // 400
            MessageBox.Show(list1.Count.ToString()); //5000

            double1 = int1 / list1.Count;
            MessageBox.Show(_prct_new_highs.ToString()); //0

Ich versteh nicht, warum bei der Division 0 rauskommt... Hab schon gescaht, es würde evtl. daran liegen, dass es 2 integer sind, aber das ist ja unsinnig... und mitm double-cast funzts auch nicht.

Vielen Dank,
royal

20.11.2006 - 23:14 Uhr

Guten Abend!

Bislang habe ich mit meinem Programm z.B. eine Txt eingelsen und mit den darin enthaltenen Werten diverse Berechnungen angestellt. Dies habe ich getan, indem ich eine List erstellt habe, in der ich jede Zeile geaddet habe.

Wie sollte man denn grundsätzlich dabei vorgehen, wenn man eine unbestimmte Anzahl von Dateien einlsen möchte und ich diese von Programmbenutzung zu Programmbenutzung variieren möchte?!
Bisher habe ich ja einfach eine List definiert und dann mit dieser gearbeitet. Da ich nun aber spontan entscheiden möchte, mit wievielen txt.Dateien ich arbeite kann ich nicht von vornherein Lists angeben, sondern sie müssen dynamisch erstellt werden können.
Aber da jede List auch einen eigenen Namen braucht weiß ich nicht genau, wie ich das anstellen soll.

Oder soll ich eine List von Lists erstellen, damit ich für jede ausgewählte datei eine List in der List adden kann?

Danke,
royal

18.11.2006 - 00:04 Uhr

Das das Control als Bmp gespeichert wird bekomme ich nun hin. Problem ist nur folgendes:
der Inhalt des DGV ist so groß, dass es nicht in die Size der DGV passt und dementsprechend scrollbars entscheiden. Wenn ich das DGV nun als bmp speicher, dann speichere ich auch nur den sichtbaren Bereich. Ich fürchte, dass das speichern des gesamten Inhalts nur möglich ist, wenn ich das DGV so erweitere, dass es sich dem Inhalt anpasst, sodass alles sichtbar wird und ich es dann speichere... Aber wie kann ich abrufen, wie groß der Inhalt des DGV's ist, damit ich sowohl die Form- als auch die DGV-Größe dementsprechend abändern kann?