Zum Inhalt springen

Rubansky

Mitglieder
  • Gesamte Inhalte

    11
  • Benutzer seit

  • Letzter Besuch

  1. Bei meinem Datagridview mit Kontextmenü wird die gewählte Reihe bei einem Rechtsklick nicht verändert. Bei nem Rechtsklick hat der Benutzer aber die Möglichkeit per Kontextmenü die gewählte Reihe anzupassen. Es wäre also schön, wenn auch die Reihe gewählt ist die vorher mit Rechts geklickt wurde. Ich tippe darauf das das sehr leicht ist, also bevor ich mir selber was aufregendes per this.dataGridView1.Click += ... bastele frage ich lieber mal nach.
  2. Vielen Dank für die Hilfe, ich wußte doch das es sehr einfach sein muss. Das ändern von wcsc.Show(); nach wcsc.ShowDialog(); hat schon alles getan was ich wollte, bisher war nicht geplant, dass ich das Fenster aus irgendwelchen Gründen offen lasse. Der Benutzer sollte nur die änderungen speichern oder verwerfen können. Deine Lösung ist natürlich näher an Word, ich denke mal drüber nach ob ich das noch ändere .
  3. Hallo zusammen, Mein Programm zeigt Informationen aus Dateien in verschiedenen Tabs an. Es ist möglich einige Daten zu verändern. In dem falle soll wie bei Word beim (ungespeicherten) Schließen gefragt werden ob die Datei gespeichert werden soll. dazu habe ich bisher this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.VisualForm_FormClosing); Das dort hinterlegte Fenster erscheint auch, allerdings wartet er nicht das bearbeiten des Fensters ab sondern macht mit dem Schließen weiter und bevor man sich versieht ist alles dicht. Wie halte ich den Prozess auf, bis das erzeugte Fenster abgearbeitet ist? Danke schonmal.
  4. Den Code nochmal ordentlich... #region Using directives using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Windows.Forms; #endregion class Form1 : Form { private DataGridView dataGridView1 = new DataGridView(); private BindingSource statistic; private DataGridViewTextBoxColumn statcolumn1 = new DataGridViewTextBoxColumn(); private DataGridViewTextBoxColumn statcolumn2 = new DataGridViewTextBoxColumn(); private DataGridViewTextBoxColumn statcolumn3 = new DataGridViewTextBoxColumn(); public Form1() { // Initialize the form. // This code can be replaced with designer generated code. dataGridView1.AllowUserToAddRows = false; dataGridView1.Dock = DockStyle.Fill; Controls.Add(this.dataGridView1); this.Text = "DataGridView.SortCompare demo"; } public void PopulateDataGridView() { this.statcolumn1.DataPropertyName = "ID"; this.statcolumn2.DataPropertyName = "Name"; this.statcolumn3.DataPropertyName = "City"; this.statcolumn1.Name = "ID"; this.statcolumn2.Name = "Name"; this.statcolumn3.Name = "City"; this.dataGridView1.Columns.Add(this.statcolumn1); this.dataGridView1.Columns.Add(this.statcolumn2); this.dataGridView1.Columns.Add(this.statcolumn3); dataGridView1.Rows.Add(new string[] { "1", "Parker", "Seattle" }); dataGridView1.Rows.Add(new string[] { "2", "Parker", "New York" }); dataGridView1.Rows.Add(new string[] { "3", "Watson", "Seattle" }); dataGridView1.Rows.Add(new string[] { "4", "Jameson", "New Jersey" }); dataGridView1.Rows.Add(new string[] { "5", "Brock", "New York" }); dataGridView1.Rows.Add(new string[] { "6", "Conner", "Portland" }); person first = new person ("1", "Parker", "Seattle"); person second = new person("2", "Parker", "New York" ); person third = new person("3", "Watson", "Seattle" ); this.statistic = new BindingSource(); this.statistic.DataSource = typeof(person); this.dataGridView1.DataSource = this.statistic; this.dataGridView1.SortCompare +=new DataGridViewSortCompareEventHandler(dataGridView1_SortCompare); this.statistic.Add(first); this.statistic.Add(second); this.statistic.Add(third); this.dataGridView1.AutoResizeColumns(); } protected override void OnLoad(EventArgs e) { PopulateDataGridView(); base.OnLoad(e); } // Establish the main entry point for the application. static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e) { // Try to sort based on the cells in the current column. e.SortResult = System.String.Compare( e.CellValue1.ToString(), e.CellValue2.ToString()); // If the cells are equal, sort based on the ID column. if (e.SortResult == 0 && e.Column.Name != "ID") { e.SortResult = System.String.Compare( dataGridView1.Rows[e.RowIndex1].Cells["ID"].Value.ToString(), dataGridView1.Rows[e.RowIndex2].Cells["ID"].Value.ToString()); } e.Handled = true; } public class person { public string id, name, city; public person(string id, string name, string city) { this.id = id; this.name = name; this.city = city; } public string Name { get { return name; } } public string ID { get { return id; } } public string City { get { return city; } } } }
  5. Ok, ich habe mich vom Funktionierenden aus fortbewegt, und das vom Konzept her an das angepasst was ich habe. Ich füge einmal Rows direkt hinzu, und einmal über die datasource. Welche Rows angezeigt werden hängt davon ab ob this.dataGridView1.DataSource = this.statistic; auskommentiert ist oder nicht. Mit der Zeile funktioniert das sortieren nicht mehr. An welcher stelle muss ich jetzt eingreifen? Hier ist aber im gegensatz zu meinem eigentlichen Code der ColumnHeader noch klickbar, allerdings taucht das sortier icon nicht auf und dataGridView1_SortCompare wird aber nie aufgerufen (per breakpoint darin getestet). Denkbare Lösung wäre halt Icon und Sort selber zu setzen/aufzurufen bei einem .Click auf den jeweiligen Header, möchte aber lieber wissen warum es nicht funktioniert . #region Using directives using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Windows.Forms; #endregion class Form1 : Form { private DataGridView dataGridView1 = new DataGridView(); private BindingSource statistic; private DataGridViewTextBoxColumn statcolumn1 = new DataGridViewTextBoxColumn(); private DataGridViewTextBoxColumn statcolumn2 = new DataGridViewTextBoxColumn(); private DataGridViewTextBoxColumn statcolumn3 = new DataGridViewTextBoxColumn(); public Form1() { dataGridView1.AllowUserToAddRows = false; dataGridView1.Dock = DockStyle.Fill; Controls.Add(this.dataGridView1); this.Text = "DataGridView.SortCompare demo"; } public void PopulateDataGridView() { this.statcolumn1.DataPropertyName = "ID"; this.statcolumn2.DataPropertyName = "Name"; this.statcolumn3.DataPropertyName = "City"; this.statcolumn1.Name = "ID"; this.statcolumn2.Name = "Name"; this.statcolumn3.Name = "City"; this.dataGridView1.Columns.Add(this.statcolumn1); this.dataGridView1.Columns.Add(this.statcolumn2); this.dataGridView1.Columns.Add(this.statcolumn3); dataGridView1.Rows.Add(new string[] { "1", "Parker", "Seattle" }); dataGridView1.Rows.Add(new string[] { "2", "Parker", "New York" }); dataGridView1.Rows.Add(new string[] { "3", "Watson", "Seattle" }); dataGridView1.Rows.Add(new string[] { "4", "Jameson", "New Jersey" }); dataGridView1.Rows.Add(new string[] { "5", "Brock", "New York" }); dataGridView1.Rows.Add(new string[] { "6", "Conner", "Portland" }); person first = new person ("1", "Parker", "Seattle"); person second = new person("2", "Parker", "New York" ); person third = new person("3", "Watson", "Seattle" ); this.statistic = new BindingSource(); this.statistic.DataSource = typeof(person); /* *Wird die nächste Zeile auskommentiert funkioniert das sortieren wieder, allerdings mit den per Rows.Add hinzugefügten Personen. */ this.dataGridView1.DataSource = this.statistic; this.dataGridView1.SortCompare +=new DataGridViewSortCompareEventHandler(dataGridView1_SortCompare); this.statistic.Add(first); this.statistic.Add(second); this.statistic.Add(third); this.dataGridView1.AutoResizeColumns(); } protected override void OnLoad(EventArgs e) { PopulateDataGridView(); base.OnLoad(e); } static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e) { e.SortResult = System.String.Compare( e.CellValue1.ToString(), e.CellValue2.ToString()); if (e.SortResult == 0 && e.Column.Name != "ID") { e.SortResult = System.String.Compare( dataGridView1.Rows[e.RowIndex1].Cells["ID"].Value.ToString(), dataGridView1.Rows[e.RowIndex2].Cells["ID"].Value.ToString()); } e.Handled = true; } public class person { public string id, name, city; public person(string id, string name, string city) { this.id = id; this.name = name; this.city = city; } public string Name { get { return name; } } public string ID { get { return id; } } public string City { get { return city; } } } }
  6. Hi, ich habe in meinem Programm zwei DataGridViews, die als datasource über bindingsource jeweils ein anderes Objekt meines Programms haben. Die einzelnen Zeilen landen alle bei beiden wie gewollt in der Tabelle. Allerdings kann ich die Tabelle nicht nach einzelnen Spalten sortieren. Also die ColumnHeaders sind nichtmals klickbar. Habe die Beispiele aus der Hilfe getestet (How to: Customize Sorting in the Windows Forms DataGridView Control) und dort wird der ColumnHeader beim MouseOver ja heller, derartiges ist bei mir nicht der fall. SelectionMode ist nicht auf ColumnHeaderSelect. Der Sortmode der einzelnen Spalten ist stets Automatic. Die Spalten sind immer TextBoxColumns. Ich benutze im Übrigen Visual Stuido 2005 Beta 2 Jemand ne Idee?
  7. Ok, vielen Dank. Da es sich durchaus auch mal um 100 oder mehr Fahrten (also Zeilen) mit im Schnitt jeweils 20 Elementen handeln kann läuft es dann wohl in der Tat auf die Mausauswertung hinaus. Schade, hatte gehofft das es da was buntes für gibt .
  8. Hi, ich habe eine GUI in der ich Bus-Fahrpläne darstelle. Einzelne Fahrten werden bisher einfach durch ein Rectangle dargestellt, dessen breite von der länge der Einzelfahrt abhängt. Die ganze Fahrt des Busses besteht dann aus einer Zeile mit lauter bunten Rechtecken. Soweit so einfach. Nun hätte ich gerne das man die Rechtecke auch anklicken kann um dann die Eigenschaften dieser Fahrt (Startzeit...) angezeigt zu bekommen (evtl. auch per MouseOver). Gibt es da was geschicktes für? Mir würde sonst nur einfallen die Mausposition auszuwerten, und daraus auf das angeklickte Element zu schliessen, das ist zwar machbar, aber vielleicht geht das ja doch auch schöner :eat: Schonmal im vorraus vielen Dank für die Hilfe.
  9. soviel zu dem hat sich erledigt teil: Nun erzeuge ich in Main eine ArrayList ArrayList dienstelemente = new ArrayList(); in der ich durch File-Einlesen einzelne Dienstelemente ablege. Allerdings muss ich mit dieser Arraylist in nahezu jeder anderen Klasse rumspielen, z.B. die länge sowie start- und endzeit der einzelnen Dienstelemente auslesen und gucken ob sie aneinander passen. Es muss doch einfach möglich sein Objekte zu erzeugen und auf diese dann überall zuzugreifen, ohne das ich sie der Methode immer mit an den Kopf werfe?
  10. tja, hat sich an sich erledigt. nach static hätte ich natürlich Configuration.min_ch... statt configuration.min_ch... schreiben müssen. Würde mich dennoch interessieren, ob es eine andere möglichkeit gibt, für den Fall das ich demnächst mal 2 oder 3 Konfigurationen gleichzeitig verwenden möchte.
  11. Hallo, ich verzweifle gerade ein wenig und hoffe hier ein wenig hilfe zu finden. 1. Ich hab eine Config-Klasse mit ein paar Feldern, die zunächst mit den Standartwerten initialisiert werden (z.B. min_change_time). public class Configuration { public int min_change_time = 60; public Configuration () { } } 2. Ich habe eine Dienstgenerator-Klasse, die auch Main() enthält, in welcher nun solch ein Configuration-Objekt erzeugt wird. public class Dienstgenerator { [sTAThread] public static int Main(string[] args) { Configuration configuration= new Configuration(); } } 3. Es gibt weitere Klassen, z.B. Pow Innerhalb der Dienstgenerator-Klasse bzw. Main() kann ich z.B. mittels configuration.min_change_time = 10; die Felder meines Objektes benutzen (lesen schreiben usw.). Aber alle anderen Klassen verweigern sich bei configuration.min_change_time und sagen "The type or namespace name configuration could not be found (are you missing a using directive or an assembly reference?)" Der Plan ist halt ein Configurations-Objekt zu haben, welches zunächst mit Standartwerten initialisiert wird. Allerdings soll es möglich sein die Werte durch einlesen einer Datei zu überschreiben. Mache ich die Felder static bleibt die Fehlermeldung in den Fremden Klassen (z.B. Pow) und darüber hinaus bekomme ich jetzt auch in Dienstgenerator den Fehler "Static member 'Dienstgenerator.Configuration.min_change_time' cannot be accessed with an instance reference; qualify it with a type name instead" Ich bin mir ziemlich sicher, dass ich an irgend einer stelle ein gewaltiges Brett vorm Kopf hab, aber weder die Kreissäge Google noch gemeinsames ziehen meiner Java/C++ Freunde konnten es entfernen. Und ich dachte Code von C++ nach C# portieren kriege sogar ich hin *seufz*. Schonmal vielen Dank für die Hilfe oder zumindest fürs Lesen .

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...