Nicht OnPaint() überschreiben, sondern einen Renderer implementieren und dem ContextMenuStrip zuweisen.
Google-Suche dürfte dir reichlich Ergebnisse bringen. Auf Codeproject findest du einen großen Artikel über den ToolStripRenderer.
So sieht das dann ungefähr aus:
public class ContextMenuStripRenderer : ToolStripRenderer
{
override ...
}
this.contextMenuStrip.Renderer = new ContextMenuStripRenderer();
und wenn man im forum sucht, dann finded man noch an anderer stelle diesen vorwurf. ich mag JunkyXL trotzdem 😉
Ich dachte mir doch schon, dass du dich auch noch daran erinnerst 😃
Ich würde es nur nicht als Vorwurf ansehen, sondern mehr als Stichelei 😉
Ich habe bei dir zwar etwas mehr Mühe beim Lesen, aber solange die Sympathien stimmen 😃 komm ich damit gut klar.
😃 erfasst
Naja ich meinte ja halbwegs. In jeder Sprache ist es üblich (abgesehen kyrillische Schrift, usw...) den Satzanfang groß zu beginnen. Das würde fürs Erste schon reichen.
Ich bin ja kein Rechtschreib- oder Grammatikfetischist, aber es ist irgendwie schon lesbarer, angenehmer. Durch den großen Satzanfang sieht man die Satztrennung auch viel besser.
Früher habe ich nach Lust und Laune groß-/klein geschrieben.. Aber den großen Satzanfang habe ich mir selten nehmen lassen. Mittlerweile weiß ich wie anstrengend das für Leser ist, und deswegen habe ich mich in der Hinsicht gebessert 😉
PS: Im Englischen sind bestimmte Wörter und Namen auch groß geschrieben ("I", <Name>) 😃
Wer denkt denn an den Leser, der verstehen soll, was hier geschrieben (nicht: gesprochen) wird. Verballhorntes Deutsch ("iwie"), fehlende Worttrennung ("dasser"), fehlende Zeichensetzung usw. erschweren das Verständnis unnötig. Wenn es sich nur um Tippfehler und Zeichendreher handelte, wäre es noch hinnehmbar; aber ein Satzbau, der jegliches grammatikalisches Verständnis vermissen lässt - nein danke!
Da sagst du etwas... Hinsichtlich dieser Umgangssprache, die mir schon fast die Lust verdirbt, auf eine Frage zu antworten, wäre es vielleicht nicht verkehrt, von den Usern eine ordentliche Schreibsprache einzufordern.
Und zwar genau so wie die Thematik){gray} [Hinweis] Wie poste ich richtig?
Aber gut, das nur mal so am Rande.
Dazu kommt bei mir persönlich, dass ich Beiträge oft erst nach dem Abschicken noch mal hinsichtlich der Tipp-, Rechtschreib- und Grammatikfehler und auch der Verständlichkeit korrekturlese und dies alles anschließend durch Editieren verbessere. :::
Deswegen lasse ich mir viel Zeit vor dem Abschicken, um mir später 2, 3, 4-fach Editierungen zu ersparen. Nachteil: In der Zwischenzeit hast du oder ein anderer schon gepostet 😃 wie unfair 😦
Tipp- und Rechtschreibfehler machen mir nicht viel. Mein Gott, für Rechtschreibfehler kann man nicht viel. Der eine ist da besser und der andere eben nicht so.
Viel wichtiger für mich ist die zumindest halbwegs Groß- und Kleinschreibung, die einen Text deutlich lesbarer macht. Da könnte ich hier im Forum so ein, zwei Leuten auf den Deckel hauen 😉
Ich verwende für die ComboBox ohnehin ein spezielles unabhängiges ComboBoxItem-Objekt wie man es eigentlich erwarten würde. Dort überschreibst du ToString(), was dem angezeigten Item-Text in der ComboBox entspricht.
Im Tag des Objekts kannst du dann das dahinterliegende Kunden-Objekt speichern.
Die DLLs kannst du schon nutzen, aber dazu musst du, wie Femaref schon sagt, einen Webservice dazwischen schalten, der auf deine vorhandenen Methoden zugreift und die Daten an deine Silverlight App zurückgibt.
Stell mal den Hintergrund auf Red.
Ich denke mal, dass ein Border um die Elemente gezeichnet wird, du das auf der aktuellen Hintergrundfarbe nur nicht erkennst.
Alternativ versucht, über OnClick ranzukommen (sofern dafür das Event gefeuert wird)?
weil ich die schlechte angewohnheit habe alles selber zu machen. Nicht automatisch schlecht.. Im Gegenteil.
Ist bei mir auch nicht anders. Ich denke, es liegt daran, dass ich dann weiß, was es genau tut und dass es von mir ist 😃
Ich sags mal so.. In der Zeit in der du hier bisher gepostet hast, hättest du das schon fertig gehabt. Da sparst du am falschen Ende 😉
Edit: Für solche Sachen leite ich in deinem Fall von ListView ab und lass mir über eine Methode ein ListViewLayout-Objekt oder dergleichen zurückgeben und kann dieses dann irgendwo speichern, oder umgekehrt der ListView zuweisen.
achso, sehe ich jetzt erst. Hatte vorher mit 'Hallo' keine Synonyme vorgeschlagen bekommen 😉
Ja, das scheint dann neu zu sein.
War nur verwirrt, weil du gemeint hast
neue Funktion bekommen. Es gibt jetzt ein Wörterbuch
Die Übersetzung gibt es doch schon lange.
Instanzierung von was? Zeig mal ein bisschen Code her, vor allem den Code der Konsolenanwendung.
Noch ein kleiner Hinweis:
Setze 'Attribute' hinter dem Attribut-Klassennamen. Damit folgst der Namenskonvention für Attribute.
Nach meinem Vorstellungsgespräch war es das erste und letzte Mal, dass ich hier in der Firma jemanden gesietzt habe.
Ein sehr lockerer Umgangston, sogar Späßchen und Sticheleien mit dem Chef 😃
Wenn du dich an eine laufende Anwendung hängst (Attach to process), kannst du keine Codeänderungen durchführen. Sonst erhälst du genau diese Fehlermeldung.
Wie Jack sagt, bekommst du die auch bei optimiertem Code (selbst wenn Anwendung aus VS heraus gestartet wurde).
Habe das hier zufällig heute gefunden:
http://www.codedblog.com/2007/09/17/owner-drawing-a-windowsforms-textbox/
Entweder mit RotateTransform oder am besten über Graphics.Transform.RotateAt()
dort kannst du noch den Punkt angeben, der als Drehpunkt dienen soll.
Die Methoden und Properties des Frameworks sind eigentlich sehr detailliert dokumentiert, unter anderem auch welche Exceptions auftreten können.
Von daher weißt du auch, was auftreten kann.
Immer schön der Reihe nach. Habe gerade nicht so viel Zeit.
Erklär mal in paar Schritten was du genau vorhast.
Was gibt ico.ToBitmap() zurück? Testweise kannst du das Bitmap auf die Festplatte speichern.
Bitmap bmp = ico.ToBitmap();
bmp.Save();
Versuch mal aus folgender Zeile:
//fav1.Image = ((System.Drawing.Image)(System.Drawing.Image.FromHbitmap(ico.ToBitmap().GetHbitmap())));
das zu machen:
fav1.Image = ico.ToBitmap();
und führe die Version ohne Kommentare aus.
Edit: Sorry, mir grauts wenn ich deinen Code sehe. Verwende anstatt get- und set-Methoden lieber Properties und halte dich möglichst an die übliche Groß- und Kleinschreibung (private Member klein, Methoden, Properties groß)
Ich finde es bei Anwendungen völlig daneben, wenn sie sich bei einem Klick auf X minimieren, anstatt das zu tun, was man erwarten würde.
Daher würde ich nur im Resize auf WindowState = Minimized prüfen und dann ShowInTaskbar = false setzen.
System.Configuration.AppSettingsReader
Wenn du das ContextMenuStrip als Kontextmenü benutzt, kannst du auf dem jeweiligen ToolStripMenuItem das Image-Property setzen.
Wo setzt du denn den Text?
Wenn du die Bilder sowieso an bestimmten Koordinaten haben willst, dann verwende doch ein FlowLayoutPanel. Das kümmert sich selbst drum.
Zum Beispiel.
Ich denke, genau aus dem Grund, da man sich Delegaten leicht selbst definieren kann, hat man auch auf einige verzichtet, um Platz zu sparen o.ä.
Hast du mal geschaut was bei ContextMenuStrip.Parent drin steht?
Falls es nicht anders geht, mach das manuell.
MouseClick-Event auf dem Button --> ContextMenuStrip.Show();
Edit: Eventuell das SourceControl Property
Bitmap bitmap = new Bitmap(this.panel.Width, this.panel.Height);
using (Graphics g = Graphics.FromBitmap(bmp))
{
// Zeichnen
}
bmp.Save();
Das brauchst du aber nicht während des Paint-Events zu machen. Kannst du an einer beliebigen Stelle ausführen.
Forumssuche und Google hätte dich sicher auch auf diese Lösung gebracht, zumal ich Control.DrawToBitmap() bereits als mögliche Lösung vorgeschlagen habe.
Edit: Forumssuche "Print control" -->
Erster Treffer:
Drucken eines Controls????
und den folgenden Post von Programmierhans
Control.DrawToBitmap();
oder Bitmap.Save(); (--> Innerhalb des Paint-Event)
Edit: moment, mir ist gerade nicht ganz klar was du willst.
was bedeutet für dich "ausdrucken"? Am Bildschirm anzeigen oder physikalisch ausdrucken?
Jap, einen eigenen 😃
Eventuell kannst du es noch mit Action<T> probieren. Übergabeparameter, ohne Rückgabewert.
Ansonsten :::
Falls die Methode auch mal synchron kommt, kannst du bei der Prüfung auf :::
ListView.DoubleClick, siehe MSDN
Im Event Handler dann ListView.SelectedItems --> ListViewItem.Index.
Ein eigenständiger Thread erstellt bei mir in einer Funktion ein Stackpanel und sendet dieses verpackt in einem Event an meine GUI.
Fehler 1: Erstellen von Controls außerhalb des UI Threads.
Meine GUI fängt dieses Event ab und soll dann das StackPanel einer ListBox hinzufügen.
Fehler 2: Zugriff eines Controls auf ein Control aus einem anderen Thread.
Definier ein Event á la CreateStackPanel.
In der UI, wo du das event abonnierst, machst du ein <Control>.Invoke(<Methode>).
In dieser Methode machst du deine UI Zugriffe. Dort erstellst du also dein StackPanel.
Das sollte dir normalerweise anhand des genannten Threads von Jack klar sein.
Ein Delegate ist ein Funktionszeiger. Wenn du auf ihm Invoke aufrufst, ist es, als würdest du ganz normal eine Methode aufrufen.
Deshalb musst du auf dem GUI invoken (Control.Invoke()) und nicht das delegate selbst.
Einmal Xaml ausgeführt, lässt es sich nicht mehr zurückholen.
Musst also etwas selbst schreiben.
Evtl. soll das aber in Zukunft möglich sein (wahrscheinlich durch einen eingebauten Parser).
alternativ (vorsicht -> Bad Way) kannst du im mousedown/-click event vormerken welche taste geklickt wurde (z.b. in einer variable) und diese variable dann beim clickevent abprüfen. allerdings solltest du vorher sicherstellen, das das mouseevent vor dem clickevent kommt.
Ist absolut nicht nötig. Das Click-Event ist das gleiche wie MouseClick, nur auf linke Maustaste gefiltert. Die beiden Events werden auch zum gleichen Zeitpunkt ausgelöst.
Das MouseClick-Event hat eben Mausinformationen und das Click event eben nicht, da es sich um einen Standard-Linksklick handelt.
ich möchte nicht die MouseClick oder irgendwelche MouseEvents dafür benutzen
Deswegen gibt es auch keinen Grund, alternativ an die Maustaste heranzukommen.
Deswegen interessiert mich, wieso du das Event nicht verwenden willst.
Was hast du genau vor?
Evtl. lässt sich dein Problem dann anders lösen.
In solchen Fällen habe ich immer prozentual umgerechnet.
PageScale habe ich noch nie ausprobiert.
Dann probier das doch aus und verwende es wenn es funktioniert.
Beim Laden der Form sind wohl wahrscheinlich noch keine Daten zum Zeichnen vorhanden. Also kann da nicht viel passieren oder?
Du solltest aber nie CreateGraphics benutzen. Weit aus dem Fenster gelehnt 😉
Zumindest nie zum Zeichnen und Darstellen auf dem Control.
Lösung: ein zweites & ==> &&
Die Lösung hattest du doch in deinem Eröffnunspost bereits erwähnt.
Darum: Einfach die
> auffalse
setzen. Fertig 😉 Das erinnert mich an :::
Damit weiß er aber nicht, seit wann es inaktiv ist.
Ein & kennzeichnet ein Mnemonic, was den Folgebuchstabe unterstreicht.
Daher das Verhalten.
Sobald wieder eine Aktivität erfolgt, timer.Stop(), anschließend timer.Start() bzw. Enabled = false, Enabled = true.
Überspringen wir diese Helferklasse, da sie mit dem eigentlichen Thema nichts zu tun hat, zumal sie imho unnötig ist. Entweder PointF oder Point, was meistens auch ausreicht.
Wozu möchtest du denn das Zeichnen unterdrücken?
Ich gehe eher davon aus, dass es sich gar nicht um das Instance-Property handelt. Das müsste ohnehin auch mit expliziter Klassenangabe funktionieren.
Du scheinst das statische Feld zu einem Zeitpunkt irgendwo zu verwenden, wo es noch null ist.
Übergebe stattdessen das Property. Das wird niemals null sein.