Laden...

Forenbeiträge von Catscrash Ingesamt 40 Beiträge

03.07.2010 - 09:51 Uhr

-.-

thx... hatte es mit Convert.ToString(control.Inoke(...)) probiert und das hat irgendwie Probleme gemacht (Stack overflow, ganz seltsame Fehlermeldungen) mit (string) gehts wunderbar

03.07.2010 - 09:40 Uhr

Hi,

herbivore schreibt in seiner FAQ [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)

Ein weiter Unterschied ist, dass man bei Invoke leichter an einen evtl. Rückgabewert der Aktion kommt als bei BeginInvoke.

Ich wüsste gerne wie.

        
private delegate string getTextBoxContentsDelegate(string str_textbox);


        /// <summary>
        /// Gibt den Inhalt einer TextBox zurück
        /// </summary>
        /// <param name="str_textbox">Name der Textbox aus der der Text kommen soll</param>
        /// <returns>Text der gewünschten Textbox</returns>
        public string getTextBoxContents(string str_textbox)
        {
            TextBox textbox = textboxes[str_textbox];       //Dictionary aller Textboxen wird aufgerufen und genutzt

            if (textbox.InvokeRequired)                      //Aufruf aus fremdem Thread?
            {
                textbox.Invoke(new getTextBoxContentsDelegate(getTextBoxContents), new Object[] { str_textbox });      //Falls ja per Delegat Threadsicher neu aufrufen
               return ... //??? <<<<<<<<<<
            }
            else
            //do some other invoke-required things, enable some textboxes, labels and buttons, etc.
            return textbox.Text;
        }

So, damit das funktioniert muss ich jetzt natürlich irgendwie an den Rückgabewert der per Delegat aufgerufenen Funktion kommen, wie mache ich das?

Andere Frage: Angenommen ich lasse alles andere aus der Funktion raus, sondern gebe nur den text einer Textbox zurück, brauche ich dafür invoke?

30.06.2010 - 10:30 Uhr

Hallo,

ich starte folgendermaßen einen Splashscreen in meinem Form1-Konstruktor:

if (!debug)                                                 //Splashscreen nervt beim ständigen kompilieren, daher bei debug==true deaktiviert
            {
                Thread splash = new Thread(new ThreadStart(DoSplash));  //Thread vorbereiten für Splash-Screen
                splash.Start();                                         //Splash-Screen Thread wird gestartet
                Thread.Sleep(2000);                                     //2 Sekunden pausiert...
                splash.Abort();                                         //getötet...
                Thread.Sleep(500);                                     //Sicherheitspause... danach gehts mit dem eigentlichen Programm weiter
            }
        private void DoSplash()
        {
            splash sp = new splash();
            sp.ShowDialog();
        }

Die splash Klasse ist dann einfach eine ganz simple Windowsform mit Hintergrund Bild, den Teil habe ich so aus dem Internet als Codeschnipsel gefunden und das funktioniert beim Kompilieren auch super, das Bild verschwindet, das Hauptfenster kommt, alles bestens.

Aber: Wenn ich das ganze nicht per F5 aus dem VS starte, sondern einfach per Klick auf die generierte .exe, dann startet der Splashscreen und nach den 2 Sekunden startet auch das Hauptprogramm, aber der Splashscreen ist immer noch da und geht erst weg wenn ich irgendwo hin klicke...

Hat da jemand eine Erklärung für?
Danke

Catscrash

26.06.2010 - 13:25 Uhr

😃 das mag ich, thx

26.06.2010 - 12:03 Uhr

das beachtet aber nur genau zwei Stufen. Im Allgemeinen ist es besser, das rekursiv zu lösen.

deshalb der edit mit der rekursiven Funktion 😃

In der foreach hast du ja bereits TextBoxen, also weg mit den unnötigen Casts:

Für den ersten code war das casting unnötig, das stimmt, aber wenn du dir meinen edit nochmal ansiehst, solltest du sehen, dass es so in der rekursiven Funktion nicht gehen kann, weil die ja auch groupboxen etc. durchlaufen muss um da eventuell rekursiv reinzugehen.

26.06.2010 - 09:55 Uhr

thx, eine Kombi aus euren Tips tut jetzt genau was ich will


            foreach (Control item in this.Controls)
            {
                foreach (Control subitem in item.Controls.OfType<TextBox>())
                {
                    TextBox subitemtextbox = subitem as TextBox;
                    textboxes.Add(subitemtextbox.Name, subitemtextbox);
                }
            }

edit:

und nochmal für alle die sowas nochmal brauchen, so geht es durch alle Containerelemente durch die ich benutze


addTextBoxesToDictionary(this);
            
private void addTextBoxesToDictionary(Control c)
        {
            foreach (Control item in c.Controls)
            {
                if (item is TextBox)
                {
                    TextBox textbox = item as TextBox;
                    textboxes.Add(textbox.Name, textbox);
                }
                if ((item is TabControl || item is TabPage || item is GroupBox)) //Hier könnte man noch andere Container hinzufügen
                    addTextBoxesToDictionary(item);
            }
        }

26.06.2010 - 01:06 Uhr

Habe ein directory<String,Textbox> und würde da gerne alle meine Textboxen reintun...


foreach (Control item in this.Controls)
            {
                foreach (Control subitem in item.Controls)
                {
                    if (subitem is TextBox)
                        textboxes.Add(subitem.Name, subitem);
                }
            }

funktioniert allerdings nicht, da subitem ja ein "Control" ist und keine Textbox... was kann ich tun? das directory als <String,Control> zu definieren verlagert das Problem nur auf später...

Thx!

Catscrash

23.06.2010 - 19:59 Uhr

hättest du dafür vielleicht ein Beispiel? wäre Spitze...

Kann man Form1 auch als Singleton-Klasse definieren? oder geht das nur mit anderen Klassen / macht den Designer kaputt / hilft mich nicht, oder was auch immer...

Danke schonmal 😃

23.06.2010 - 19:40 Uhr

ach du meinst ich soll einen

Form1 Displayklasse = new Form1(); 

Aufruf in den einzelnen Methoden meiner Halcon-Klasse (und für jede nötige Methode einzeln) schreiben? Aber dann hab ich doch jedes Mal neue Instanzen der Form1 oder?

edit: ja die interaktion klappt jetzt, aber jetzt habe ich halt jedes Mal eine neue Form1-Instanz was ich daran merke, dass die globalen Variablen z.B. jedes Mal auf die Standardwerte zurückgesetzt werden.

23.06.2010 - 19:07 Uhr

Hi,

Ich instanziere eine Klasse in Form1:

 halcon HalconClass = new halcon();

jetzt möchte ich aber gewisse public Funktionen / public Variablen in der Form1 aus meiner HalconClass aufrufen / benutzen und

 Form1 Displayklasse = new Form1();

liefert (verständlicherweise) StackOverflow Fehler wegen Endlosschleifen...

(ich will nicht direkt auf eine Textbox zugreifen oder ähnliches, ich will nur auf eine Funktion in der Klasse Form1 zugreifen, die in der Lage ist, die Textbox dann zu ändern)

Was kann ich tun?
Ich habe mir gedacht ich könnte vielleicht was ich brauche als "public static" definieren, ich brauche da jeweils eh nur eine Instanz, aber dann bekomme ich in der Form1 selbst Ärger beim Benutzen von normalen Variablen in statischen Methoden...
(es wäre ein Objektverweis erforderlich?)

alles doof...

viele Grüße und Danke
Catscrash

29.04.2008 - 16:01 Uhr

ne weile her das ich das letzte mal dran gearbeitet habe aber das problem gibts noch 😉 ich habe eine Konfigurationsdatei die ich mit meiner Anwendung gestartet habe, jetzt klicke ich im WindowsExplorer mit rechts auf diese Konfigurationsdatei --> öffnen mit --> und wähle meine Anwendung aus, leider hat die jetzt keinen Namen sondern nur ein Symbol...

Sry, war blöd erklärt

29.04.2008 - 15:17 Uhr

ist der seit VS2003 also Framework 1.1 kleiner geworden? was wird da alles drin gespeichert? und wie kann ich mir den ansehen / überprüfen wie voll er ist?

danke für die ratschläge schonmal

29.04.2008 - 14:58 Uhr

ja perfekt, danke, das es so einfach ist ... 😉 unter xp musste man da ewig in den ressourcen rumfummeln

29.04.2008 - 13:23 Uhr

wo liegt denn da die grenze? unter 2003 läuft der selbe code ohne beanstandungen durch... kann ich irgendwie prüfen wie viel prozent dieses callstack schon voll ist, dann könnte ich schauen an welcher stelle das so steigt...

29.04.2008 - 13:19 Uhr

Hi,
in der MSDN von VS2003 gabs einen schönen Bereich in dem genau beschrieben stand wie man den XP-Style benutzen kann, gibts sowas für VS2008 und Vista auch? Momentan sieht alles noch nach Klassik-Design aus

Dankeschön
Catscrash

29.04.2008 - 13:11 Uhr

Hi,
ich hab heute, aufgrund Umstieg auf Vista, mein Projekt von Visual Studio 2003 auf Visual Studio 2008 konvertiert... Seit dem habe ich einen seltsamen Fehler dem ich nicht Herr werde:

Eine nicht behandelte Ausnahme des Typs "System.StackOverflowException" ist in System.Drawing.dll aufgetreten.

Das ganze tritt in einer Rekursion auf, die dll ist nicht immer System.Drawin sondern manchmal auch diese mscor... es ist auch nicht immer die selbe Zeile innerhalb dieser Rekursion die Probleme macht, sondern immer andere. Ramverbraucht liegt bei max 20MB zu dieser Zeit laut Taskmanager, 2gb physikalischer speicher frei.

Besonders häufig tritt die Exception an dieser Zeile auf:
brightness = myBitmap.GetPixel(pos.X,pos.Y).GetBrightness();

Die Rekursion durchläuft ein Schwarzweißbild und merkt sich die Umrisse...

Ich weiß, keine allzu konkreten Hinweise die ich hier gebe, aber ich hab keine Ahnung wo ich anfangen zu suchen und damit was ich euch dazu mehr sagen soll, also wenn ihr noch irgendwelche Konkreten Infos braucht nur zu, den kompletten Rekursionscode kann ich leider nicht posten.

06.06.2007 - 13:51 Uhr

Hallo,
wenn ich meine Anwendung bei öffnen mit... Auswähle ist zwar das Symbol derselbigen da, aber kein Name, was muss ich einstellen damit auch der Name erscheint?

Dankeschön 🙂
Catscrash

29.05.2007 - 11:16 Uhr

Hi,
ich erstelle mit meinem Programm ein Diagramm was dann nachher in (momentan noch) bmp oder png exportiert werden kann... allerdings eignen sich ja gerade diagramme die ja nur aus linien etc. bestehen perfekt für vektorbasierte dateiformate um sie nachher mit CorelDraw oder ähnlichem beliebig vergrößern zu können, z.b. für Publikationen, Poster, etc.
das simple speichern als EMF funktioniert allerdings nicht, das scheint dann immer noch eine pixelgrafik zu sein... was genau muss ich dafür tun?

25.05.2007 - 13:36 Uhr

danke, das funktioniert super 🙂

25.05.2007 - 13:10 Uhr

Hi,
ich zeichne mit dem PaintEventHandler in eine pictureBox mit e.Graphics.Drawline usw. einige Graphen... jetzt würde ich das fertige Bild gerne in eine bitmap oder lieber noch jpeg konvertieren und speichern finde aber irgendwie die passende Funktion nicht...

dankeschön...
Catscrash

23.05.2007 - 14:32 Uhr

hi,
kann man vom DrawString den align ändern? momentan nimmt er ja den angegebenen Pixel als linken Bezugspunkt, ich hätte das aber gerne Rechtsbündig, geht das?

dankeschön...
Catscrash

21.05.2007 - 15:10 Uhr

Heyho... wo ist der Unterschied - abgesehen von der Syntax - zwischen


arTestMDim = new int[4,5];

und


int[][] arTestJagged = new int[4][];
int []arTestJagged[0] = new int[5];

ich kannte bisher aus php und co nur das zweite als mehrdimensionales array, daher wundere ich mich gerade etwas das ersteres als solches bezeichnet wird und zweiteres "Jagged-Array" heißt ... wenn mir da jemand kurz den Unterschied / Vorteile / Nachteile näherbringen könnte... 🙂 das wär fein

Dankeschön
Catscrash

16.05.2007 - 13:57 Uhr

Hi,
plötzlich ist der FolderBrowserDialog in meinem Projekt nur noch grau... ein komplett graues Fenster, nur unten die Buttons neuen ordner erstellen / ok / abbrechen sind noch da...
in einer alten build funktioniert er noch einwandfrei, allerdings habe ich seitdem schon viel zu viel am code verändert um noch sagen zu können was das sein könnte...
hat einer von euch eine Idee was so eine veränderung hervorrufen könnte?

danke...
Catscrash

€dit: der Dialog scheint zu funktionieren, wenn ich auf gut glück irgendwo hinklicke und ok sage habe ich einen ausgewählten ordner, nur die Darstellung scheint nicht zu klappen.

€dit2: lag an [MTAThread]

16.05.2007 - 11:02 Uhr

mh, inzwischen mit einem schönen microsoft natural ergonomic keyboard 4000, ansonsten ist alles noch so, die drei rechten Monitore am Main-PC, die beiden anderen PCs (XP & Ubuntu) per synergy verbunden... feines tool 🙂:

16.05.2007 - 10:47 Uhr

naja, ganz vorstellen kann ich mir eigentlich nicht das da die grenze der festplatte sein soll, aber ich habe keine andere Erklärung dafür, dass die CPU-Auslastung soweit unten ist...

16.05.2007 - 10:40 Uhr

Hi,
ich berechne ca. 800k Bilder, mein Algo ist inzwischen so schnell, das bei der Berechnung die CPU nicht mehr auf 100% steht, sondern nur noch mit 20% ausgelastet wird, offensichtlich ist jetzt also die Festplatte mein Flaschenhals... bringt es in diesem Fall irgendetwas einzelne Teile der Berechnung in Threads auszulagern, also z.B. verschiedene Ordner sodass immer 100k auf einmal berechnet werden? oder würde das - so mein verdacht, das ganze eher langsamer machen?

dankeschön,
mal wieder der
Catscrash :>

16.05.2007 - 10:38 Uhr

danke euch beiden 🙂

16.05.2007 - 10:16 Uhr

Hallo,
ist es sinnvoll einer Methode (warum heißt das eigentlich nicht mehr Funktion...) ein ganzes Array zu übergeben wenn ich das dort bearbeiten möchte?

das Array ist außerhalb der aufrufenden Methode deklariert, die Methode kann also darauf zugreifen auch wenn ich es nicht übergebe, nur für das Wissen, welches Array da benutzt werden soll ist es sicher sinnvoller eine Art Zeiger oder Referenz oder ähnliches zu nutzen statt ein 8k Elementiges Array komplett zu übergeben, oder?

wie mache ich das? beim Aufrufen ein & vor die Variable?


private void blubba()
{blubb(&data,5);}

private void blubb(double[] calcarray, int m){}

muss die blubb-Methode auch noch irgendein Zeichen bekommen das das kein echtes Array sondern nur ein Zeiger darauf ist?

und werden so, alle Änderungen in der blubb-methode an calcarray auch an data gemacht?
danke...
Catscrash

11.05.2007 - 16:48 Uhr

und der aufruf dann mit

listBox1.Invoke(new GuiControlDelegate(GuiControl), new Object[] {methodcontroll,m,tc});

falls es noch jemanden anderen interessiert freu

dankeschön, endlich funktioniert alles wie es sollte 😉

11.05.2007 - 16:23 Uhr

mh

App.cs(904): Die Methode 'WindowsApplication9.Form1.GuiControl(int, int, int)' stimmt nicht mit dem Delegat 'void System.Windows.Forms.MethodInvoker()' überein.

Der Fehler kann behoben werden, indem Sie entweder die Methode oder die Signatur des Delegaten korrigieren.

er mag also scheinbar nicht das die methode was übergeben bekommen kann?
aber das brauche ich ja um ihr Parameter aus dem anderen Thread mit auf den Weg geben zu können...

11.05.2007 - 14:08 Uhr

Hallo,
entsprechend zu diesem thread:
[FAQ] Controls von Thread aktualisieren lassen (Control.Invoke)

hab ich versucht mir meine eigene Methode aufzubauen die zugriff auf meine GUI-Elemente nimmt.

		
void GuiControl(int methodcontroll, int m, int tc)
{
	switch(methodcontroll)
	{
		case 1:
			if(listBox1.InvokeRequired)
			{
				listBox1.Invoke(new MethodInvoker(GuiControl(1,m,tc)));
				return;
			}
/* zugriff auf die Steuerelemente, Code aus platzgründen auskommentiert*/
			break;
/* ein paar andere Cases kommen hier noch*/
	}
}

jetzt bekomme ich folgende Fehlermeldung
App.cs(904): Methodenname wird erwartet

wobei Zeile 904 folgende ist:

listBox1.Invoke(new MethodInvoker(GuiControl(1,m,tc)));

das ganze auch in jedem anderen case...
könnt ihr mir sagen was da schief läuft? der Zugriff aus dem anderen Thread heraus mit dem Aufruf

GuiControl(4,0,tc);

liefert keine Fehler...

11.05.2007 - 09:08 Uhr

ah... typsichere sprache... richtig da war mal was... okay, danke damit wäre das auch geklärt... gibt es vlt. ne einfachere möglichkeit (insbesondere eine die schneller zu tippen ist) als Convert.ToDouble? Es sind natürlich variablen, keine fixen werte, aber die sind halt bis zu dem Punkt zwingend als int vorliegend...

11.05.2007 - 01:28 Uhr

irgendwas muss ich falsch machen... ich hab jetzt double, decimal und float ausprobiert, aber 1/400 ist und bleibt scheinbar 0... und nicht nur das, ich kann gar keine zahlen teilen, was ich rausbekomme bleibt irgendwie immer int?!


double newtime = 1/400;
MessageBox.Show(Convert.ToString(newtime));

ist es einfach nur zu spät? oder übersehe ich etwas grundlegendes...
danke...
Catscrash

10.05.2007 - 20:14 Uhr

Hashtables funktionieren perfekt, danke 🙂

10.05.2007 - 19:41 Uhr

gibts eigentlich ne möglichkeit vs 2003 mit .net 2 auszustatten? .net 2 SDK installieren oder so? hilft das?

10.05.2007 - 19:24 Uhr

mh, damit kann mein VS 2003 irgendwie gar nix anfangen?

Ungültiger Ausdruck 'string'
; wird erwartet
Erkennungszeichen erwartet.
Ungültiger Ausdruck '>'
; wird erwartet
Ein neuer Ausdruck erfordert () oder [] nach 'type'
Ungültiger Ausdruck 'string'

usw...
gibts die klasse vlt. nur in vs 2005?

10.05.2007 - 16:53 Uhr

perfekt, danke

10.05.2007 - 16:04 Uhr

Hallo,
eine wahrscheinlich ziemlich dumme Frage...

ich habe einen haufen von Zeichenketten, denen ich gerne werte zuweisen möchte, also

"Hans Wurst" <-- 0
"Otto Blubb" <-- 200
"Guck in die Luft" <-- 124

da C# ja scheinbar anders als PHP nur ints in den Array-Bezeichnern oder wie man das auch nennen mag, annimmt, also myArray[blubb] geht nicht sondern nur myArray[0], frage ich mich wie ich das am besten lösen könnte...

es gibt bestimmt eine ganz simple lösung... 😕

10.05.2007 - 12:49 Uhr

okay, dann probier ich das mal 😉

10.05.2007 - 12:06 Uhr

Hallo,
ich suche einen fast Fourier transform Algorithmus für C#. Im Buch Numerical Recipes findet man ihn für C++ / C allerdings sind meine C# Kenntnisse wohl noch nicht soweit als das ich den umschreiben könnte, hat einer von Euch selbigen vielleicht schonmal für C# gesehen / benutzt?

danke
Catscrash