Ha! Ich hab den Fehler gefunden, es lag an einer falschen Reihenfolge.
Ich habe
e.Graphics.TranslateTransform(ContainerRoot.Panel2.AutoScrollPosition.X, ContainerRoot.Panel2.AutoScrollPosition.Y);
nach der Zeichnung ausgeführt, nicht davor. Bei dem Implementieren der SplitContainer muss mir die Zeile wohl irgendwie nach unten gerutscht sein.
Vielen Dank an alle!
Hallo, danke schon einmal für die Antworten.
Ich habe von this.AutoScrollPosition auf ContainerRoot.Panel2.AutoScrollPosition gewechselt, aber der Fehler ist immer noch vorhanden.
Mehrfachaufrufe meinerseits habe ich nicht, ich nutze z. Zt. keine weiteren OnPaint/Paint Methoden.
Wenn ich bei einem Scroll-Event Invalidate() ausführe, dann bleibt mein Bild auf der 0,0 Position, obwohl ich den Balken bewege (auch mit der Änderung der AutoScrollPosition).
Hallo,
ich habe ein Problem dass ich den ganzen Tag schon nicht lösen kann.
Ich habe ein eigenes Controll programmiert, dessen eine Hälfte scrollable sein soll. Dafür habe ich ein SplitContainer genommen und nutzte das Paint Event der Panels zum Zeichen (sie selber haben ja kein echtes "OnPaint" zum überladen).
Beim Scrollen der Panels kommt es aber jetzt zu Grafikartefakten, die ich mir nicht erklären kann. Wenn ich das komplette Control scrolle, bzw kein SplitContainer nutze, funktioniert es einwandfrei.
public partial class TimingTable : UserControl
{
//In TimingTable.Designer.cs
private System.Windows.Forms.SplitContainer ContainerRoot;
private void InitializeComponent()
{
[...]
this.ContainerRoot.Panel2.AutoScroll = true;
this.ContainerRoot.Dock = System.Windows.Forms.DockStyle.Fill;
this.Controls.Add(this.ContainerRoot);
}
//In TimingTable.cs
[...]
private void ContainerRoot_Panel2_Paint(object sender, PaintEventArgs e)
{
e.Graphics.Clear(Color.White);
e.Graphics.Draw[......]
ContainerRoot.Panel2.AutoScrollMinSize = new Size(maxX + 50, maxY + 50);
e.Graphics.TranslateTransform(this.AutoScrollPosition.X, this.AutoScrollPosition.Y);
}
}
Ich hoffe ich habe als meinem SourceCode alles relevante kopiert. Was genau mache ich falsch?
Nein, ich wollte es nicht vergessen.
Mir ist bewusst dass es komplex wird, ich habe auch genug Erfahrung so etwas umzusetzten.
Mir ging es auch eher um den konzeptionellen Ansatz.
Ich werde auch eher in C++ mit Irrlicht schreiben, das ist mir was das angeht irgendwie lieber. Aber das tut ja nichts zur Sache.
Hallo,
ich habe ein konzeptionelles Problem.
Ich wollte mich mal an eine Art Aufbauspiel trauen, in Richtung Die Siedler/Age Of Empires.
Leider steh ich bezüglich des Grundkonzepts auf dem Schlauch.
Wie bekomme ich meine Arbeiter dazu Ressourcen von x nach y zu tragen ohne dass Konflikte entstehen?
Ich habe mir Gedacht ich mach mir Arbeiter, Job, Ressourcen und Häuser-Klassen.
Jeder Arbeiter hat einen "Job" (zB Idle, GetRessource, TransportRessource...)
Ich iteriere über alle Arbeiter, und wenn dessen Job Idle ist, dann schau ich bei allen Häusern ob wer eine Ressource brauch. Wenn ja, iteriere ich über meine Liste Ressourcen und schaue ob eine verfügbar ist, und ändern dementsprechend die Jobs.
Ergibt das Sinn?
Ich habe leider keine Referenz für so etwas im Internet gefunden, ohne gleich tausende Seiten Quelltext lesen zu müssen.
Gruß
Hallo,
ich habe gerade mein erstes Projekt mehr oder weniger fertig und will nun das ganze per Setup.exe verfügbar machen. Ich habe mir dazu Inno Setup installiert und ein Script geschrieben, welches auch soweit ganz gut funktioniert.
Mein Projekt besteht nur aus der .exe, einer Hand voll .dll und einer Datenbankdatei (sqlite), welche alle in einem Order liegen (C:\Program Files\MyProj).
Jetzt habe ich das Problem, dass meine C# Anwendung nicht die DB-Datei bearbeiten kann, da sie wohl im Admin Bereich liegt. Ich habe zwar die Berechtigungen für "Everyone" und "Users" auf "full" gesetzt, aber das hat nicht geholfen.
Nun zur Frage:
Wie mache ich das vernünftig?
Ich dachte ja schon an %AppData%, diese sind jedoch (wenn ich das richtig verstehe) Nutzergebunden. Die Datenbank soll aber Systemweit die gleiche sein.
Muss ich die Berechtigungen anders ändern oder gibt es von Windows dafür geeignete Order?
Mit freundlichem Gruß,
thetemplar
PS: Ich hoffe dass das nicht schon 1000x gefragt wurde, aber die Suche nach "C# Installationsorder" etc ist weniger zielführend...
Hallo,
ich versuche Daten von meinem Mikrocontroller über den Serielport zu lesen.
Dummerweise kann ich nur Zeichen von 0-127 auslesen, die restlichen 128 Zeichen werden zu "?".
Wie lese ich den geneuen Hexwert von 0-256 aus? Leider finde ich dazu keine wirkliche Hilfe im Netz, deshalb stell ich die Frage nun hier, in der Hoffnung einer weis die Antwort.
void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string insert = "";
insert = ConvertToHex(serialPort.ReadExisting());
this.BeginInvoke(new SetTextDeleg(si_DataReceived), new object[] { insert });
}
public string ConvertToHex(string asciiString)
{
string hex = "";
foreach (char c in asciiString)
{
int tmp = c;
hex += String.Format("{0:x2}", (uint)System.Convert.ToUInt32(tmp.ToString()));
}
return hex;
}
ConvertToHex sollte richtig sein, es wandelt "255" korrekt in FF.
Hallo,
ich hab ein kleines Problem.
Ich habe eine Main_Form, in der ich eine neue, kleine Form aufrufe, die bloß 2 Editboxen und 1 Button enthält.
Jetzt soll der Nutzer da 2 Werte eintragen und bestätigen, dannach sollen die Werte in der Main_Form weiter verarbeitet werden. Wie mach ich das richtig? Ich bin schon mit ref und der gleichen am hantieren, komme aber auf keinen grünen Zweig.
MfG
Vielen lieben Dank, hat geklappt =)
Hallo,
ich versuche gerade das CodeSnipped "WebClient mit HTTP-POST- und Cookie-Unterstützung" zum Laufen zu bekommen, jedoch bekomme ich > Fehlermeldung:
kein Verweis auf "System.Web" für "HttpUtility".
Ich weis aber auch nicht wie ich den genau hinzufüge. Wenn ich die System.Web.dll einfach per "Projekt -> Verweis hinzufügen -> Durchsuchen" oder im "Projektmappen Explorer" hinzufüge, bekomme ich die Warnung "Die Komponente "System.Web", auf die verwiesen wird, wurde nicht gefunden." Dann ist bei den Verweise zwar ein "System.Web" aufgelistet, aber mit einem Ausrufezeichen und ohne Pfad, Laufzeitversion etc...
Was mache ich falsch?
Sau gut, danke.
Geht alles ruckelfrei mit onPaint und doubleBuffer =)
Schönen Tag euch noch.
MfG
Hallo,
ich hab ein kleines Problem, zu dessen Lösung ich keinen Ansatz weiß.
Ich habe eine PictureBox, im Durchschnitt 500x1000 Pixel, die ein Bild anzeigen soll, dass wesentlich größer ist. Dazu habe ich das Bild in kleiner Bilder á 256x256 Pixel zerlegt und setzte immer die Teile zusammen, die ich brauche. Dabei ist das Bild bei z.B. einer pictureBox-Breite von 1024px nicht 4256 groß, sondern 6256 (links und rechts um eins erweitert).
Somit kann ich Pixel für Pixel auf dem großen Bild scrollen, und muss mich nicht alle 256 Pixel vor kämpfen.
Klappt alles auch einwandfrei, selbst mit MouseMove, so dass ich das Bild "weg zeihen" kann.
Hierbei wird aber ein Problem deutlich: Das erstellen eines Bildes aus z.B. 24 einzelnen Bildern dauert etwas, so dass ein ziehen auf dem Bild nicht flüssig ist.
Gibt es da irgendwas, was diese Zeit optimieren könnte? Irgendwie vorbuffern und dann besser verschieben? Ich habe keine Ahnung nach was ich da suchen müsste.
Mit freundlichem Gruß,
Templar
Ich habe mir jetzt eine eigene Software geschrieben, funktioniert soweit auch ohne Probleme (Zoom, Waypoints etc), nutzte dazu Seekarten, das zum Teil auch so gedacht ist.
Jetzt würde ich aber gern noch eine Europa/Deutschland Karte erweitern, weis aber nicht genau, wie ich die Ressourcen, gegeben durch OSM, in C# verarbeite.
Meine Seekarten sind alles *png Datei, deren Pixel/Meter Verhältnis überall gleich ist.
Mit den *osm Datein kann ich irgendwie nichts anfangen. Kann ich sie genau so nutzen? Ich brauche keine Daten über die Straße etc selber, ich will nur auf einer Offline Karte anzeigen wo man sich befindet.
Tutorials/Beschreibungen dazu findet man leider nicht wirkliche.
Kann mir da jemand Helfen oder weis was?
MfG
Edit: Argh, ich hab gerade meine Bitmap und meinen Graph verwechselt, sorry =)
Erstmal danke, das DrawImage klingt nach dem, was ich gesucht habe =)
Einzeln sind es keine 100MB, sind viele "einfache" Bilderchen, also welche, die gut zu komprimieren sind.
Edit: Wie speicher ich eine so große Bitmap? Images kann ich ja per .save speichern, bitmaps nicht.
Hallo,
ich habe knapp ca 3.500 kleine 256x256 png Bilder, die ich gern zu einem großen zusammensetzen würde.
In ihrem Dateinamen enthalten sie schon die Anordnung, sprich
"x1 y1.png", "x2 y1.png" etc.
Ich habe leider noch nie mit Bildern gearbeitet und weis kein Anfang, Google hilft ausnahmsweise mal nicht weiter.
Jemand eine Idee?
Danke
MfG
Templar
Hallo,
ich brauche für ein selbst gebauten GPS Empfänger eine Software, die mir auf einer Offline-Karte wie Google Maps mein Standpukt anzeigt und (vorallem) mit der ich arbeiten kann, zB Waypoints setzen, nächsten Waypoint berechnen etc.
Ich hab mich schon schlau gemacht was es so alles gibt und bin dabei auf mehrere Probleme gestoßen. Die Google-Maps API z.B. verbannt meine Waypoints immer auf eine Straße und ist nur online verfügbar. Offline verfügbar wäre angeblich OpenStreetMap, aber ich weis nicht wie ich damit um gehen soll. Und das Hauptproblem wäre ein Fenster, dass es mir ermöglicht mit der Karte zu arbeiten, zB ein Dropdown per Rechtsklick auf der Karte anzuzeigen.
Jemand schon so etwas gemacht?
MfG
Hallo,
ich hab ein verwirrendes Problem.
Ich habe in Programm das per HotKey ein "+" schreiben soll, ganz simpel:
private void faster()
{
SendKeys.SendWait("+");
}
Ich habe das auch noch mit 2 anderen Zeichen.
Jetzt das Problem: Alle Zeichen kann ich z.B. an Notepad senden, außer das "+". Wenn ich es ersetzte durch was auch immer geht es, setzte ich ein "+" kommt einfach garnichts.
Kennt jemand das?
MfG
Hey,
ich suche jetzt schon seid Tagen nach einer Lösung zu einem eigendlich einfachen Thema: Ich will gewisse Tastatureingaben (oder einfach alle) sperren.
Bevor jetzt alle mit Link an Kopf werfen die man mit 30s googlen findet: Es gibt einen Harken: Ich hab keine user32.dll. Die Software soll auf einem PDA mit WinMobile laufen, und dieses "tolle" Betriebssystem hat keine solche dll.
Gibt es einen anderen Weg die Tastatur zu sperren oder die dll einzubinden? Würde es mit einer "externen" dll überhaupt gehen?
Achja: Die Tastenanschläge die kommen, kommen nicht von einer physischen Tastatur, sondern einem Emulator, der Daten eines RFID Readers ließt und auf eine imaginäre Tastatur hämmert. Leider auch ungefragt, also vllt ließe sich die Quelle verbieten aus der die Tastenanschläge kommen.
Ja, aber wieso wird der Focus 2x aufgerufen? Wenn nach der Proz. irgendwas wieder dein Focus "erneuert" und das Event triggert sollte es ja wie eine Endlosschleife wirken und nicht bloß 2x.
Ja, ich werde ab jetzt alles durch dein "Sei kein Idiot"-Text jagen. Ich kenne Google, aber die MSDN hilfe zum debugger ist beschissen und alles andere half mir auch nicht.
Der Thread bewegt sich in dieser Richtung.
Nachdem das Thema drölf Posts ignoriert wurde weil ich this übergebe und nun aus versehen eine grundlegende Frage gepostet hab...
Breakpoints sagen nichts aus, das hab ich schon vorher durch exorziert, ich dachte es gibt Tricks beim Debugger. Grundlegend kann ich schon lesen.
Aber durch die BPs kann ich auch nur feststellen das es 2x im Focus ist. Setzte ich einen BP an da Ende von void Form1_GotFocus(object sender, EventArgs e) bricht er das Programm mit einem Form2 ab. Also muss irgendwas es nochmal aufrufen... irgendwas... irgendwo.. *gnah
Oder die eine Textbox den Focus 2x. Aber ich hab keinen Schimmer wie ich denen das Ausreden kann.
Mehr als
for (i = 0; i < 9; i++)
{
if (dynButton[i].Focused)
{
bt_blank.Focus(); //<- Irgendwas anderes in Fokus nehmen...
Form2 zweitesform = new Form2();
zweitesform.Show();
}
}
fällt mit nicht ein
Ich nutze MS Visual Studio 2008 Prof, mit dem "mitgeliefertem Equipment".
Ich habe eben ein neues Standartprojekt angelegt, um es als normale Win Anwendung zu testen. Auch hier öffnet er Form2 2x.
Wie kann ich nun den Debugger gescheit auslesen? Nutze c#, bzw Visual Studio noch nicht lange und musste es bis jetzt noch nicht machen. Wirkliche Informationen liefert er mir nicht. Nach dem Programmstart durch MS-VC ändert sich in "Ausgabe anzeigen von: [Debugger]" nichts. Oder überseh ich das eigendlich Fenster.
Seh ich das falsch oder Übergibt Form1 Form2 daten in dem Quelltext von dir eben?
Sorum ist das kein Problem, das geht ja auch per Construktor.
Ich übergebe "this", damit Form 2 auf Form 1 rumkritzeln kann.
Was meinst du mit "Welchen hast du leicht"?
//edit:
davon ab liegt es nicht an dem Übergeben. "Unschöne" Sachen muss ich später eh noch ausbügeln, hab da noch 2-3 andere Sachen. Aber auch mit leerem Constructor öffnet er form_keyboard 2x... X(
Allerdings solltest du dem KeyBoard-Form nicht this übergeben
Hm, hatte ne viertel Stunde gegooglt und irgendwie wurde diese Lösung bevorzugt, aber ich werd mich mal auf dem Link vor dir schlau machen, danke.
Das Problem ist, dass es eine Anwendung für ein PDA ist, aber ich kann die exe auch Problemlos unter WinXP startet. Nur eben nicht per Debugger, der will immer so ein Emulatur des PDAs starten der meine Software nicht mal läd und überhaupt müffelt 😛
//edit: danke, ich werds mal fix ändern
J hat die Größe 9. Ich lade die Anzahl an Feldern die ich brauch aus einer Datenbank.
j = dt_anzahl.Rows.Count;
Habs eben mal schnell Manuell auf 9 gesetzt, daran liegt es nicht 😉 Hätte mich auch gewundert...
Hey,
ich sitzt jetzt schon seid Stunden an ein und dem selben Problem:
Ich habe eine Formular auf dem mehrere Textboxen sind. Wenn ich eins anklicke soll sich ein 2tes Formular mit einer Tastatur öffnen. Wenn ich dieses Formular schließe soll der eigegebene Wert übertragen werden in die jeweilige Textbox.
Leider sind es nicht vorher definierte Textboxen, sondern dynamisch erzeugt, dh ist dass mit den Funktionen so ne Sache...
Mein Problem: Nehm ich eine Box ins Focus öffnet sich das Tastaturformular jedesmal 2x. Wieso auch immer...
TextBox[] dynBox = new TextBox[100];
[...]
for (i = 0; i < j; i++)
{
dynBox[i] = new TextBox();
dynBox[i].GotFocus += new EventHandler(form_scan_GotFocus);
[...]
}
[...]
void form_scan_GotFocus(object sender, EventArgs e)
{
for (i = 0; i < j; i++)
{
if (dynBox[i].Focused)
{
form_keyboard keyboardform = new form_keyboard(dynBox[i].Text, i, this);
keyboardform.Show();
}
}
}
Jemand eine Idee? Oder einen anderen Lösungsweg?
//edit: Auch nochmal den Constructor des Tastaturforms:
private form_scan scan_ref = null;
int k;
[...]
public form_keyboard(string i, int k, form_scan scan_ref)
{
InitializeComponent();
tb_text.Text = i.ToString();
this.k = k;
this.scan_ref = scan_ref;
}
[...]
private void bt_ok_Click(object sender, EventArgs e)
{
scan_ref.dynButton[k].Text = tb_text.Text;
this.Close();
}