Laden...

Forenbeiträge von _tb_ Ingesamt 416 Beiträge

29.11.2006 - 11:12 Uhr

Hallo,

versuchs mal mit auf DesignMode zu prüfen.

cu, tb

28.11.2006 - 20:47 Uhr

Hallo thomassa,

In den Tablesstyles DataGrid gibts noch die GridColumnStyles. Diese besitzen eine Headertexteigenschaft, welche genau die Funktionalität bietet die du suchst.

cu, tb

27.11.2006 - 21:12 Uhr

Hi,

im Prinzip genau das. Nur musst du auch noch eine DataGridViewColumn ableiten und deinen eigenen CellType zurückgeben. Ist also auch kein Aufwand.

cu, tb

25.11.2006 - 12:12 Uhr

Hallo netter_mann99,

das ist dann eigentlich auch gar nicht mehr so schwer (wenn man's erst mal weiß). Angenommen "index" ist der Index der Zeile im DataGridView, dann kannst du mit

DataRow row = ((DataRowView)dgv.Rows[index].DataBoundItem).Row;
int origIndex = row.Table.Rows.IndexOf(row);

zum einen die Zeile in der Tabelle direkt bzw. ihren Index bestimmen.

cu, tb

24.11.2006 - 18:10 Uhr

Hallo,

Oder du schreibst dir eine eigene Klasse welche die gleichen Interfaces wie DataView implementiert und delegierst alle Methoden genau so an den DataView weite. Einzige Ausnahme, in der Count-Eigenschaften gibst du maximal 70 zurück.

Diese Lösung hat zwar einen hohen Schreibaufwand, ist aber im Grunde sehr einfach zu realisieren. Dem DataGridView wird praktisch vorgegaukelt, es gäbe höchstens 70 Einträge.

cu, tb

24.11.2006 - 18:04 Uhr

Hallo Raiser,

leider ist es im DataGridView (im Gegensatz zum alten Datagrid) nicht mehr möglich, ständig Controls darauf zu platzieren. Das Control wird ausschließlich angezeigt, wenn sich die Zelle im Editiermodus befindet. Daher diese 'Minimal'-Buttons, welche von der Zelle selbst gezeichtet werden. Dies hat vor allem Performancegründe, aber leider auch die Nachteile, dass man keine vollwertigen Controls zur Verfügung hat.

D.h. im Klartext du musst die Buttons, diesmal inklusive Hintergrundbild, selbst zeichnen. 8o. Dafür musst du von der Zelle selbst ableiten und die Paintmethode überschreiben.

Zum wechseln des Cursors musst du noch die MouseEnter und MouseLeave Methoden überschreiben und den Cursor direkt im DataGridView setzen (Zumindest hab ich jetzt keine Cursoreigenschaft in der Zelle entdeckt.)

hoffe das hilft dir erstmal weiter.

cu, tb

24.11.2006 - 17:48 Uhr

Hallo FZelle,

erstens bewirkt SuspendLayout imho nur dass ChildControls nicht neu angeordnet werden.

zweitens kann eine ExpressionColumn nur Werte aus der gleichen Zeile zur Berechnung heranziehen, nicht aber Werte verschiedener Zeilen addieren.

cu, tb

24.11.2006 - 16:57 Uhr

Hallo,

ganz anders. Da beim Sortieren nicht die Tabelle direkt umsortiert wird, sondern nur ein View darauf, würde es reichen direkt auf der Tabelle zu operieren. Dann kann dir die ganze Sortierungsgeschichte egal sein. Ansonsten kannst du die Spalten auch jeweils manuell sortieren, was allerdings wesentlich mehr Aufwand bedeutet.

cu, tb

16.11.2006 - 19:22 Uhr

Hallo kleines_eichhoernchen,

das Format welches du darstellst, soll vermutlich CSV entsprechen. Nun gibt es in CSV die möglichkeit die Daten mit "" zu umschließen. Excel z.B. erkennt dann das Komma als Textinhalt. In deinem Programm könntest du dann einfach die Auftreten von " zählen und nur bei gerader Anzahl das Komma als Trenner interpretieren.

Von deiner Variante würd ich absehen. Man kann sicher immer Fälle konstruieren, bei denen das Komma falsch interpretiert wird.

cu, tb

04.11.2006 - 17:24 Uhr

Hallo SoHeLL,

Unterabfragen würde ich vermeiden wenn es nur geht. Wenn du nämlich 10.000 Autos in deiner Tabelle hast, wird die Variante sehr langsam.

Eine Alternative wäre:

SELECT k.autoid from kaufe k
LEFT OUTER JOIN verkaufe v ON k.autoid = v.autoid
WHERE v.autoid IS NULL

Das gibt dir alle Auto-IDs aus der Käufetabelle zurück, die in Verkäufe keinen JOIN-Partner haben.

[EDIT]
Du willst also ALLE gekauften Autos erhalten? Dann rufst du einfach nur die aus der Käufetabelle ab und ignorierst die Verkäufe völlig.
[/EDIT]

cu, tb

31.10.2006 - 10:46 Uhr

Hi,

wie wärs mit Visual Studio. Nicht ganz so mächtig wie XmlSpy, aber immerhin schon vorhanden.

cu, tb

28.10.2006 - 17:28 Uhr

Hallo nairolF,

ich kann dein Problem leider nicht nachvollziehen. Ich hab mal folgendes testweise ausprobiert:

  • die Klassen A, B:A in eine separate, nicht referenzierte Assembly gepackt und via Reflection B erstellt.
  • Den Auslesecode in die separate Assembly gepackt und die Methode invoked.
    Beide Versionen haben mit sowohl die Eigenschaften von B, als auch von A zurückgegeben.

Auf jeden Fall verweisen die Assemblys nicht aufeinander, so wie du beschrieben hattest. Ich würde mal vermuten der Fehler liegt bei dir an anderer Stelle. Vielleicht könntest du mal ein ausführlicheres Beispiel posten, so dass man den Fehler auch nachvollziehen kann.

cu, tb

26.10.2006 - 12:30 Uhr

Hallo,

zeichen solltest du ausschließlich im Paint-Event, da der Inhalt nicht gespeichert wird und daher immer wieder neu gezeichnet wird. Das Redraw bewirkt gerade dass das Paint-Event ausgelöst wird. Da gibts auch eine Threads dazu, Forumsuche hilft ...

cu, tb

26.10.2006 - 12:27 Uhr

Hallo,

kann es sein, dass deine Tabreihenfolge etwas konfus ist. Nach dem öffnen des Fensters ist nämlich immer das Control mit dem kleinsten Tabindex aktiv. Der Scrollcontainer scollt immer automatisch zum Control mit dem Fokus. D.h. wenn die Tabreihenfolge falsch ist, kann es genau zu solchen Effekten kommen.

cu, tb

24.10.2006 - 20:21 Uhr

Hallo fips,

Bitmap.SetPixel kann einzelne Pixel setzen. Und in Verbindung mit einer Picturebox hättest du auch dein Ziel erreicht. Für Diagramme ist es evtl. sowieso besser diese auf ein Bitmap zu zeichnen, da dort die Änderungen erhalten bleiben und nicht ständig neu gezeichnet werden müssen.

cu, tb

20.10.2006 - 18:32 Uhr

Hi,

vermutlich ist die Z-Order bei dir falsch. Ich kann mir immer nicht merken wie rum es sein muss, ich glaub ein SendToBack des Toolstrips müsste helfen. Wenn nicht wars das BringToFront :-}

cu, tb

17.10.2006 - 08:34 Uhr

Hallo,

also ich könnte mir das schon vorstellen. Hat man beispielsweise eine Komponente mit einer Eigenschaft, welche vom serialisierbaren Typ ist, so versucht der Designer diese Eigenschaft zu setzen und auszulesen. Abhilfe schafft in diesem Fall das DesignerSerializationVisibility-Attribut auf Hidden zu stellen.

Andere Fälle kann ich mir allerdings auch nicht vorstellen.

cu, tb

16.10.2006 - 18:08 Uhr

Hi,

damit's ausgeglichener wird, hier mal eine Gegenstimme:

ich finde die Steuerung der kompletten Seite sollte in sich konsistent sein. Das heißt alle Links in den Posts sollen entweder im gleichen Fenster oder in einem anderen Fenster geöffnet werden. Nicht mal so und mal so. (Soweit sollten mir hoffentlich alle noch zustimmen hoff) Externe Links dagegen sollten immer in einem neuen Fenster (bzw. Tab) geöffnet werden. Aus zwei gründen: 1. auf den meisten anderen Seiten ist genau dieses Verhalten Standard und 2. um sich von den Inhalten der verlinkten Seite auch offensichtlich abzugrenzen.

Und ein neues "Fenster" öffnet sich ja sowieso nur im IE. Aber mir solls egal sein.

cu, tb

11.10.2006 - 11:16 Uhr

Hallo,

Zur automatischen Anordnung kannst du ein FlowLayoutPanel benutzen. Dieses hat außerdem eine Eigenschaft AutoScroll, wenn die eingeschalten ist, ist das Panel außerdem scollbar.

cu, tb

09.10.2006 - 19:11 Uhr

Hallo,

du kannst auch einfach die Farbe und Schriftart des betroffenen Knotens anpassen. Wenn du das MouseMove-Event des TreeViews abfängst und mitt HitTest (oder so ähnlich) prüfst ob die Maus über einem Linkknoten steht, kannst du sogar noch die Hand als Mauscursor einstellen.

cu, tb

07.10.2006 - 17:13 Uhr

Hi,

bin mir noch nicht sicher ob ich das richtig verstanden hab. In der Tabelle steht also sowas wie:

Name Mustermann
Land 49
Mann true

Falls das so ist, was ich eigenartig fände wegen der gemischten Datentypen, würde mir nur einfallen jeweils DataViews anzulegen und nach der Namen-spalte zu filtern. Den DataView kannste dann wieder an das jeweilige Control binden.

cu, tb

03.10.2006 - 16:50 Uhr

Hi,

das hier:

this.productPreferenceGroupODataGridView.CurrentRow

kommt mir irgendwie komisch vor. Denn das bezieht sich doch immer auf die gerade markierte Zeile. Im Event bekommst du doch die Zeilennummer übergeben. Versuch mal über diese auf die Zeile zuzugreifen.

cu, tb

03.10.2006 - 10:36 Uhr

Hi,

nimm lieber das CellPaint Ereignis. Das ist nämlich genau für sowas gedacht. Dort kannst du die Farbe auch gleich in den EventArgs setzen. Ich weiß nämlich nicht ob deine Variante stabil gegenüber einer Sortierung funktioniert.

cu, tb

02.10.2006 - 20:33 Uhr

Hallo,

doch, den Zugriff erhältst du. Die DataGridView-Zeile enthält eine Eigenschaft DataBoundItem. Dieses kannst du nach Bedarf auf DataRowView o.ä. casten und dann die Color-Spalte auslesen.

cu, tb

28.09.2006 - 17:14 Uhr

Hallo,

du musst den kompletten Namensraum mit angeben, sonst wird die Klasse nicht gefunden.

cu, tb

26.09.2006 - 17:14 Uhr

Hallo

oder auch Delphi. Da gibts bestimmt auch schon fertige Bibliotheken für. Vor allem GUI Entwicklung ist damit denk ich einfacher, wenn ich auch selbst noch nichts mit Delphi gemacht hab.

cu, tb

22.09.2006 - 17:17 Uhr

Hallo,

reagier auf das CellFormatting-Event und setze dort den gewünschten Wert als FormattedValue.

cu, tb

19.09.2006 - 18:44 Uhr

Hallo,

siehe Paint-Event.

cu, tb

19.09.2006 - 18:39 Uhr

Hallo,

du kannst nur eine bestimmte Zelle markieren. Daher ist die CurrentCell-Eigenschaft die gesuchte 🙂

cu, tb

16.09.2006 - 11:19 Uhr

Hallo,

erstens UDP kannst du nicht nehmen, denn ein UDP-Port ist was völlig andres als ein TCP-Port. Außerdem wüsstest du bei UDP gar nicht ob was ankommt.

zweitens. Es gibt ja auch Portscanner. Die benötigen für den gesamten Portbereich mehrere Stunden. Wenn es also eine schnelle Möglichkeit gäbe einen Port zu pingen, würden auch die Scanner schneller arbeiten.

Aber ich denke dass auf dem Server eine Firewall läuft, denn normalerweise sollte eine Fehlermeldung zurückgeliefert werden, falls auf einem Port gar kein Dienst läuft. So eine Firewall filtert diese Fehlermeldungen meist raus.

Aber was gefällt dir an der Threadlösung eigentlich nicht? Wenn du das Timeout groß genug einstellst und vielleicht noch parallel einen richtigen Ping ausführst, kannst du sicherstellen, dass der Serverrechner selbst erreichbar ist, aber der Service nicht läuft. Für was benötigt man da noch die Exception?

Achja, und die Thread.Abort-Methode sollte dir schon helfen. Machst einfach um deinen Connect-Aufruf ein try-catch(ThreadAbortException) drum. Falls diese Exception ausgelöst wird, haste ein Timeout, sonst nicht.

cu, tb

15.09.2006 - 18:39 Uhr

Hallo,

als aller einfachste Lösung könntest du natürlich das Selectstatement umschreiben:

Select NULL AS Kunnr, '(nüx)' AS Name1 
UNION ALL
Select Kunnr, Name1 from Kunden where LKZ = ''

cu, tb

14.09.2006 - 20:09 Uhr

Hallo,

wenn deine Tabelle einen Primärschlüssel besitzt, sollte die Fill-Methode die vorhandenen Daten eigentlich überschreiben. Probiert habe ich den Fall allerdings noch nicht. Falls das geht hätte sich dein Problem ja schon erledigt.

Wenn nicht, kannst du dir die Zeile nur merken (anhand des Primärschlüssels) und später wieder suchen. Das DataGridView-Control würde sich aber trotzdem neuaufbauen, da der DataView das Reset-Event wirft.

Alternative: Fill in eine andere Tabelle und von Hand abgleichen 😠

cu, tb

11.09.2006 - 20:10 Uhr

Hi,

jaja, die Beispiele sind etwas dürftig. Da hab ich auch schon einige Stunden, wenn nicht Tage, mit durch.

Aber zu deinem Problem: Eine FormatException kommt immer, wenn beim Formatieren was schief geht. D.h. nicht der erwartete Typ am Ende herauskommt (also string in deinem Fall) oder wahrscheinlicher, dass in der Formatierungsroutine eine Exception geworfen wird. Und wenn du dann mal genau hinschaust:

hiermit legst du fest dass der formatierte Wert ein string sein muss. Das Control geht dann natürlich davon aus, dass gar nichts anderes möglich ist und sorgt dafür dass dies immer eingehalten wird.

        public override Type FormattedValueType {
            get { return typeof(string); }
        }
 

und hier prüfst du ob der formatierte Wert vom Typ WeaponRange ist!!!

       public object EditingControlFormattedValue {
            ...
            set {
                if(!value.GetType().IsAssignableFrom(typeof(WeaponRange)))
                    throw new ArgumentException("Argument must be a WeaponRange.");
            ...
 

Das ist erstmal der Punkt, der mir als erstes auffällt. Es ist generell nicht ratsam in der Formatierungsroutine Exceptions zu werfen. Die gehen sowieso meist verloren. Besser wäre es, wenn du den Wert bestmöglichst verwerten würdest. D.h. im Zweifelsfall zurücksetzt.

cu, tb

11.09.2006 - 19:55 Uhr

Hallo,

es sollte auch so möglich sein. (Ohne ToString()). Zumindest wenn die Kunde-Objekte in einer BindingList<Kunde> gehalten werden, sonst bin ich mir nicht ganz so sicher. Der DataGridViewColumn übergibst du als DataPropertyName sowas wie "Adresse.Name". Allerdings kann die Großundkleinschreibung variieren, da bin ich noch nicht so ganz dahinter gekommen. Ich probiers immer solang bis es passt =)

cu, tb

08.09.2006 - 12:24 Uhr

Hi

InnerText statt InnerXml.

cu, tb

08.09.2006 - 12:22 Uhr

Hi,

probier mal beim Starten des Vorgangs:

this.DoDragDrop(this.sample, DragDropEffects.Copy | DragDropEffects.Move);

cu, tb

07.09.2006 - 12:44 Uhr

Hallo

oder du nutzt einfach die DataBoundItem-Eigenschaft der DataGridViewRow.

cu, tb

04.09.2006 - 17:36 Uhr

Hallo,

Original von schaedld
str.ToString().OpenSubKey(...

ich vermute eine falsche Klammerung ...

cu, tb

02.09.2006 - 18:07 Uhr

Hallo Jabi,

eigentlich unterstützen die meisten Emailclients RTF. Allerdings findest du den Rtf Text in der Rtf-Eigenschaft der Richtextbox. In Text steht der Text ohne Rtf-Codes (also Farben, Formatierung,...).

Allerdings sollte man den Reintext immer mitliefern, damit die Mail auch von anderen bzw. älteren Emailclients angezeigt werden kann. Daher würde ich mir mal die AlternativeViews-Eigenschaft der MailMessage näher anschauen. Dort kann man als Mimetyp auch Richtext angeben. (Im Beispiel der MSDN wird das an Html gezeigt. Dort das Html durch Richtext ersetzen)

cu, tb

02.09.2006 - 17:42 Uhr

Hallo,

oder ein TableLayout mit jeweils 50% Spaltenbreite. Das SplitPanel aktualisiert sich nicht automatisch.

cu, tb

01.09.2006 - 20:54 Uhr

Hi,

kann es sein, dass du die "@"-Zeichen vergessen hast? Dann kommt nämlich auch so ein Fehler.

cu, tb

31.08.2006 - 20:17 Uhr

Hallo,

mit dem Standardkontextmenü(bzw- strip) vermutlich gar nicht. Denn spätestens wenn du wo ganz ander hinklickst wird es sich schließen. Aber du kannst ja einfach dass DropDown-Ereignis abfangen und ein Panel drüber legen. Dann musst du das Menü noch selbst implementieren, aber anders wirds vermutlich schwierig.

cu, tb

29.08.2006 - 20:29 Uhr

Hallo nic4x4,

da alle Controls inklusive Beschriftung in InitializeComponent() initialisiert werden, kann man nur das Fenster schließen und ein neues erstellen. Ich finds eigentlich Schade, dass Microsoft den lokalisierten Code nicht in eine Extra Methode ausgelagert hat. Wäre ja an sich ein einfaches gewesen.

Einziger Ausweg, man müsste alle Einstellungen(dazu zählen aber neben den Beschriftungen auch Tooltips und Positionierungen, ...) selbst laden 😠 Vielleicht bekommt mans ja via Reflection hin, denn im Resourcefile steht ja praktisch um welche Eigenschaft welches Controls es sich handelt. Also wer mal Langeweile hat ...

cu, tb

27.08.2006 - 20:35 Uhr

Hallo,

das Problem ist ja ganz offensichtlich, dass ja theoretisch mehrere Nutzer angemeldet sein können und auch sind. Denn LocalSystem ist ja auch nur ein Nutzer. Aber auch richtige Nutzer können z.B. über RemoteDesktop angemeldet sein. Unter Win 2003 kann man alle angemeldeten User im Taskmanager anzeigen. Daher würde ich vermuten, dass man an diese Liste auch Programmtechnisch rankommen müsste. Wie aber nun genau achselzuck. Selbst dann hättest du aber immer noch die Frage, welcher Nutzer der richtige wäre. Bei normalen Singleuser-PCs würde aber nur einer aufgelistet sein.

Ich würde an deiner Stelle einen einfacheren Weg gehen. Schreib ein kleines Helferprogrämmchen, welches immer gestartet wird wenn sich ein Nutzer anmeldet. Schließlich kann dein Service z.B. via .Net Remoting diesen Userprozess fragen, welcher Nutzer angemeldet ist.

Vielleicht geht's auch noch viel einfacher. Aber ne Lösung wär's immerhin.

cu, tb

27.08.2006 - 20:24 Uhr

Hallo dass,

das Formatting-Event ist dafür da, den Zelleninhalt kontextabhängig zu formatieren, d.h. nicht den wahren Inhalt zu ändern. Denn das ändern wiederum löst wieder ein Event aus, wodurch die Zelle neu gezeichnet wird. Das Neuzeichnen wiederum erfordert wieder das Formatieren ...

Im Formatting-Event solltest du daher nur die EventArgs verändern (und e.FormattingApplied=true setzen).

Außerdem lädst du jedes mal das Bild neu von der Platte. Damit ändert sich auch die Referenz auf das Bild ständig. Nicht nur dass der Speicher dabei vollgemüllt wird, so hat auch das DGV keine Chance zu erkennen, dass es sich immer um das gleiche Bild handelt. Auch wenn ich bezweifle, dass es bei gleicher Referenz so intelligent wäre. Aber am besten du lädst alle benötigten Bilder gleich zu Beginn ein und übergibst stets nur die Referenz.

Ich hoffe ich konnte die helfen.
cu, tb

26.08.2006 - 11:22 Uhr

Hi Chroman,

Original von Chroman
Wie kann man es eigentlich erreichen das dass ganze als Symbol im Systemtray mitgestartet wird oder ist das zu umfangreich zu erklären?

Nö, is ganz und gar nicht umfangreich. Ziehst dir einfach die Komponente NotifyIcon auf die Form, wählst ein Icon aus und fertig. 🙂

cu,tb

24.08.2006 - 18:54 Uhr

Hallo,

wenn du schon eine Tabelle hast, dann häng dich doch einfach an das ListChanged Ereignis, das wäre dann ja die zentrale Stelle. Noch einfacher wär's natürlich DataBinding zu verwenden, dann macht das Framework alles von selbst.

cu, tb

09.04.2006 - 17:49 Uhr

Hallo,

ich kann mir nicht vorstellen dass das geht. Auch unter .Net1.1 hat das nie funktioniert bei mir. Man konnte sich zwar anhängen, aber er ist nicht in den Code gesprungen. Wie auch? Im Kompilat steht schließlich nicht an welcher Stelle die Methode im Quellcode steht. Im Prinzip ist ein Debug-Kompilat ohne pdb-Datei ja wie ein Release-Kompilat ohne Codeoptimierung.

cu, tb

09.04.2006 - 17:27 Uhr

Hallo ludwig,

der Fehler ist eigentlich recht einfach. Der Fehler: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt." bedeutet immer dass irgendwo eine Null-Referenz rumgeistert. Schaut man sich die Zeile in deinem Beispiel genau an, kommt man schnell zu dem Schluss dass es keine Tabelle mit dem Namen "FM" gibt.

Lösung:
übergib dem DataTable-Konstruktor in der DatenEinlesen()-Methode einfach "FM" und füg die Tabelle anschließend in das Dataset ein.
Dann sollte alles wie erwartet funktionieren.

cu, tb