Laden...

Forenbeiträge von TheBrain24 Ingesamt 56 Beiträge

13.02.2008 - 08:53 Uhr

Sorry mein Pc is grad am Arsch... ich werde den Code dann posten wenn er wieder geht.

Server:
Zuerst Dateigrösse in Byte[] umwandeln und an den Client schicken


while (readBytes < file.Length)
                            {
                                //Auslesen der Bytes aus Datei
                                length = m_FileStream.Read(this.m_bDataBuffer, 0, this.m_bDataBuffer.Length);
                                //Senden der Bytes an Client
                                this.m_soClientSocket.Send(this.m_bDataBuffer, length, SocketFlags.None);
                                Array.Clear(this.m_bDataBuffer, 0, this.m_bDataBuffer.Length);
                                readBytes = readBytes + length;
                            }


Client:
Dateigröße empfangen und Datei anlegen


lenght = 0;
while (readBytes < fileSize)
                    {
                        //Auslesen der Datenbytes aus dem Strem
                        length = this.m_soClientSocket.Receive(this.m_bDataBuffer, this.m_bDataBuffer.Length, SocketFlags.None);
                        //Schreiben in Datei
                        m_FileStream.Write(this.m_bDataBuffer, 0, length);
                        Array.Clear(this.m_bDataBuffer, 0, this.m_bDataBuffer.Length);
                        readBytes = readBytes + length;
                    }


09.02.2008 - 11:22 Uhr

Moin
Ich denk mal dass es daran liegt:
5672341 /1024 = 5539,39550...
also brauchst du 5540 Packte a 1024 bytes um die Datei zu senden
5540*1024 = 5672960 Bytes

5672960 - 5672341 = 619

Du musstest also 619 bytes zusätzlich empfangen da das letzte 1024 bytes Packet nicht komplett mit den bytes aus der datei befüllt ist. wenn dir am anfang die grösse der datei überträgst kannst es damit dann abfangen, also du sagst dem client als erstes wie gross die datei denn sein wird.

wie gesagt ich denk mal dass es daran liegt, wenns ned stimmt bitte berichtigen
servus

01.02.2008 - 13:49 Uhr

Hi Herbivore

Also mein Umgebung ist Visual Studio 2005 mit dem WM5 SDK von Microsoft.
Ursprünglich wollte ich in der BaseForm meine Farben über den Disigner anpassen. Was ja dem Konstuktor dann entspricht. Ich mein der Witz ist ja dass diverese Eigenschaften wie Größe und Position auch in der Unterklasse geändert werden. Ich hab die ganzen settings auch mal in dern FormLoad der BaseForm wie auch in den FormLoad der UnterKlasse gepackt. Widerum keine Auswirkung. Vielleicht doch nen Bug?.
Wie gesagt Größe und Position(der Textbox) werden gändert aber ForeColor und BackColor(der Textbox) nicht.

mfg Chris

01.02.2008 - 11:50 Uhr

Moin
ich hatte das selbe Problem.
Ich hab es aner dann mit einer Picturebox gelöst. Bitmap erstellen, dann auf das Bitmap zeichnen und dann das Bitmap in die Picturebox laden.
So hats bei mir nicht mehr geflackert.

mfh Chris

01.02.2008 - 11:42 Uhr

Moin Leude
der Titel hört sich vielleicht trivial an, aber ich denk nicht dass es so ist.
Ich schreibe derzeit an einem PPC Programm und benutze dazu VS 2005 und das CF 2.0.

Kleines Szenario:

Ich habe eine Basis Form (BaseForm), diese beinhaltet 3 Textboxen. Nun will ich natürlich bei einer Ändrung der Position, Größe, Font, BackColor, usw, dass sich diese Eigenschaften auch in einer abgeleiteten Form ändern.

Die Position, Größe und Schriftart wird auch mit geändert, aber zB die BackColor und ForColor bleiben auf ihrem Standartwert.

Der Zugriffsmodifier ist Protected.

Steh ich hier aufm Schlauch oder ist das vielleicht ein Bug. Wenn ein Element verebt wird, werden alle Eigenschaften mitvererbt, bzw wenn ich das Element mit dem Zugriffsmodifier Protected verebe, dann darf jede abgeleitet Klasse darauf zugreifen, also müsst ich doch auch die BackColor verändern können. Ist hier aber nicht möglich.

Für Tipps bin ich sehr dankbar
mfg Chris

23.01.2008 - 07:43 Uhr

Moin Herbivore

Vielen Dank für deine Antwort. Hatte ich gestern schon probiert, leider hab ich da das Event auf der Form abgefangen und nicht im Control selbst. Wenn ichs im Control abfange dann gehts natürlich..war Macht der Gewohnheit. Nochmals vielen Dank für den Tipp.

mfg Chris

22.01.2008 - 09:18 Uhr

Moin Leude
ich hab mal wieder ne Frage zum Progen auf nem PPC.
Also ich erstelle grad ein Benutzersteuerelement welches nur quadratisch darstellbar sein soll, egal in welcher grösse. Jetzt hab ich gelesen dass man die Begrenzungen mit dem Überschreiben von SetBoundsCore festlegen kann. Auf dem PPC ist das leider ned möglich. Hat jemand ne Idee wie ich das machen kann?

Vielen Dank
mfg Chris

17.12.2007 - 11:27 Uhr

Was für eine Verbindung willst du denn herstellen? Mit ActiveSync hast doch schon eine.
Was willst du denn mit der Verbindung anfangen? Datei transfer?

17.12.2007 - 08:03 Uhr

Falls es noch jemanden interessiert wie man das ganze per event abfangen kann:

SystemState m_State= new
SystemState(SystemProperty.ActiveSyncStatus);
m_State.Changed += new
ChangeEventHandler(m_State_Changed);

void m_State_Changed(object sender, ChangeEventArgs args)
{
}

13.12.2007 - 16:26 Uhr

na da sach ich doch ma vielen dank!!!

13.12.2007 - 15:21 Uhr

Moin Leude
hat jemand ne Ahnung ob es ein PDA mitbekommt ob er über USB und ActiveSync mit einem Pc verbunden ist?. Gibt es da vielleicht ein Event oder ne dll mit der ich das rausbekommen kann? Tut mir leid für die Frage aber ich weis nicht mal nach was ich suchen soll.
Bin für jeden Tipp dankbar.

mfg Chris

21.11.2007 - 14:26 Uhr

So ich habs jetzt so hinbekommen wie ich es mir vorgestellt hab.
Ich hab mir folgenden Code aus eine Paar Beispielen zusammengebaut(nochmals Danke an Programmierhans). Ist das so in Ordnung. Ich weis das Forum ist für solche Fragen nicht wirklich gedacht aber fragen kostet ja nix.
Szenario:

  • Files werden vom Output Ordner auf das PDA kopiert
  • Files werden vom PDA Ordner Orders in den Desktop Ordner Input kopiert

Die Klasse TransFileInfo beinhalten 2 Stringbuilder die den Dateinamen und die Dateigrösse erstellen, so dass immer jeweils 32 Byte übertragen werden egal wie lang der Dateiname oder die Dateigöße ist.
Die Klasse TransMessage beinhalten eine statische Methode SendMessage und gibt mir das zu versendende ByteArray der Messages zurück.
Die Länge der verwendeten ByteArrays wird auch noch angepasst.

Hier mal die Desktopseite:

 
private void run()
        {
            this.m_netStream.Write(TransMessage.SendMessage("TRANS_START"), 0, 16);
            while (this.m_bTransfer)
            {
                this.m_netStream.Read(this.m_bMessageBuffer, 0, 16);
                switch (this.m_sClientMessage = (System.Text.Encoding.ASCII.GetString(m_bMessageBuffer, 0, 16)).Trim())
                {
                    case "DO_SEND":
                        {
                            DirectoryInfo dirInfo = new DirectoryInfo(@"C:\Chris\Output");
                            FileInfo[] outputFiles = dirInfo.GetFiles();
                            TransFileInfo transInfo = new TransFileInfo();
                            foreach (FileInfo file in outputFiles)
                            {
                                this.m_netStream.Write(TransMessage.SendMessage("DO_REC"), 0, 16);
                                transInfo.FileName = file.Name;
                                transInfo.FileSize = (file.Length).ToString();
                                this.m_bFileInfo = System.Text.Encoding.ASCII.GetBytes(transInfo.FileName + transInfo.FileSize);
                                this.m_netStream.Write(this.m_bFileInfo, 0, 64);
                                long bytesRead = 0;
                                long offset = 0;

                                FileStream stream = new FileStream(file.FullName, FileMode.Open);
                                do
                                {
                                    bytesRead += stream.Read(this.m_bDataBuffer,0,this.m_bDataBuffer.Length);
                                    this.m_netStream.Write(this.m_bDataBuffer,0,this.m_bDataBuffer.Length);
                                    offset+=this.m_bDataBuffer.Length;
                                }while(bytesRead < file.Length);
                                stream.Close();

                                this.m_netStream.Read(this.m_bMessageBuffer, 0, 16);
                            }

                            this.m_netStream.Write(TransMessage.SendMessage("SEND_DONE"), 0, 16);
                            break;
                        }

                    case "DO_REC":
                        {
                            this.m_netStream.Read(this.m_bFileInfo, 0, 64);
                            string tempFileInfo = System.Text.Encoding.ASCII.GetString(this.m_bFileInfo, 0, 64);
                            string fileName = (tempFileInfo.Substring(0, 32)).Trim();
                            long fileSize = long.Parse((tempFileInfo.Substring(32, 32)).Trim());
                            long readBytes = 0;

                            FileStream stream = new FileStream(@"C:\Chris\Input\" + fileName, FileMode.Create);
                            do
                            {
                                readBytes += this.m_netStream.Read(this.m_bDataBuffer, 0, this.m_bDataBuffer.Length);
                                if (readBytes > fileSize)
                                {
                                    int new_size = this.m_bDataBuffer.Length - (int)(readBytes - fileSize);
                                    stream.Write(this.m_bDataBuffer, 0, new_size);
                                }
                                else
                                    stream.Write(this.m_bDataBuffer, 0, this.m_bDataBuffer.Length);
                            } while (this.m_netStream.CanRead && readBytes < fileSize);
                            stream.Close();
                            this.m_netStream.Write(TransMessage.SendMessage("GO_ON"), 0, 16);
                            break;
                        }

                    case "TRANS_DONE":
                        {
                            this.m_netStream.Write(TransMessage.SendMessage("TRANS_DONE"), 0, 16);
                            this.m_sStatus = "disconnected";
                            this.m_bTransfer = false;
                            break;
                        }

                    default:
                        break;
                }
            }

und hier die PDAseite


private void run()
        {
            while (this.m_bTransfer)
            {
                this.m_netStream.Read(this.m_bMessageBuffer, 0, 16);
                switch(this.m_sServerMessage = (System.Text.Encoding.ASCII.GetString(this.m_bMessageBuffer,0,16).Trim()))
                {
                    case "TRANS_START":
                        this.m_netStream.Write(TransMessage.SendMessage("DO_SEND"), 0, 16);
                        break;

                    case "DO_REC":
                        {
                            this.m_netStream.Read(this.m_bFileInfo, 0, 64);
                            string tempFileInfo = System.Text.Encoding.ASCII.GetString(this.m_bFileInfo, 0, 64);
                            string fileName = (tempFileInfo.Substring(0, 32)).Trim();
                            long fileSize = long.Parse((tempFileInfo.Substring(32, 32)).Trim());
                            long bytesRead = 0;

                            FileStream stream = new FileStream(@"Programme\Client\Orders\" + fileName, FileMode.Create);
                            do
                            {
                                bytesRead += this.m_netStream.Read(this.m_bDataBuffer,0,this.m_bDataBuffer.Length);
                                if(bytesRead > fileSize)
                                {
                                    int new_size = this.m_bDataBuffer.Length - (int)(bytesRead - fileSize);
                                    stream.Write(this.m_bDataBuffer,0,new_size);
                                }
                                else
                                {
                                stream.Write(this.m_bDataBuffer, 0, this.m_bDataBuffer.Length);
                                }

                            }while(this.m_netStream.CanRead && bytesRead < fileSize);
                            stream.Close();
                            this.m_netStream.Write(TransMessage.SendMessage("GO_ON"), 0, 16);
                            break;
                        }

                    case "SEND_DONE":
                        {
                            DirectoryInfo dirInfo = new DirectoryInfo(@"Programme\Client\Orders");
                            FileInfo[] outputFiles = dirInfo.GetFiles();
                            TransFileInfo transInfo = new TransFileInfo();
                            foreach (FileInfo file in outputFiles)
                            {
                                this.m_netStream.Write(TransMessage.SendMessage("DO_REC"), 0, 16);
                                transInfo.FileName = file.Name;
                                transInfo.FileSize = file.Length.ToString();
                                this.m_bFileInfo = System.Text.Encoding.ASCII.GetBytes(transInfo.FileName + transInfo.FileSize);
                                this.m_netStream.Write(this.m_bFileInfo, 0, 64);
                                long readBytes = 0;
                                long offset = 0;

                                FileStream stream = new FileStream(file.FullName,FileMode.Open);
                                do
                                {
                                    readBytes += stream.Read(this.m_bDataBuffer, 0, this.m_bDataBuffer.Length);
                                    this.m_netStream.Write(this.m_bDataBuffer, 0, this.m_bDataBuffer.Length);
                                    offset += this.m_bDataBuffer.Length;
                                } while (readBytes < file.Length);
                                stream.Close();

                                this.m_netStream.Read(this.m_bMessageBuffer, 0, 16);
                            }
                            this.m_netStream.Write(TransMessage.SendMessage("TRANS_DONE"), 0, 16);
                            break;
                        }

                    case "TRANS_DONE":
                        {
                            this.m_netStream.Close();
                            this.m_sClient.Close();
                            this.m_sClient = null;
                            MessageBox.Show("Fertig");
                            this.m_bTransfer = false;
                            break;
                        }
                        
                    default:
                        break;
                }
            }

ExceptionHandling kommt noch. Es geht mir nur um die grundlegende Struktur

Vielen Dank schon mal im vorraus
mfg Chris

21.11.2007 - 08:31 Uhr

Moin
Erstmal Danke für eure Antworten.
Ich hab gestern hier im Forum ein Beispiel für einen Filetransfer über TCP von Programmierhans gefunden(find den Thread leider nicht mehr) und den weiter ausgebaut. Ist es denn hier wirklich unpassend so etwas mit TCP zu lösen?
Ich bin leider sehr unerfahren in Netzwerktechs. Mir geht es in erster Linie darum dass ich nicht irgendwas exotisches zusammenschreib, sondern etwas benutze was auch gänging ist.

Werd mir die WS trotzdem noch anschauen.

Nochmals vielen Dank
mfg Chris

19.11.2007 - 18:54 Uhr

Moin Leude
Ich habe folgende Situation: Ich hab eine Anwendung für ein PPC geschrieben welche Dateien verarbeitet. Diese Dateien sollte der PPC von einer Desktop Anwendung geschicht bekommen und nach der Verarbeitung soll die Desktop Anwendung die Dateien wieder abholen.
Über ActiveSync kann ich auch den Transfer bewerkstelligen, aber da bei einer aktiven ActiveSync Verbindung der PC und der PPC eine ip zugeweisen bekommen möchte ich den Transfer übers Netzwerk abwickeln.
So nun meine Frage. Welche ist die beste Möglichkeit dafür?

Die Sockets
Die TCP Klasse welche ja auch im Grunde Sockets sind
oder einen FTP aufsetzeen

Gibts noch ne andere Möglichkeit, oder schon was vorgefertigtes mit dem man Dateien verschicken kann?

Wäre für Anregungen sehr dankbar, da ich durch google noch nicht wirklich schlauer geworden bin. Ich möchte eigentlich nur Anregungen darüber wie das normalerweise bzw möglichst elegangt gelöst werden kann.
Vielen Dank
mfg Chris

14.11.2007 - 12:29 Uhr

Ich habs mir viel zu umständlich gemacht.
Die Opennetcf.Desktop.Communication.dll bietet eine CERegistry Klasse und eine CERegistryKey Klasse mit der man durch die Knoten gehen kann.
Ich habs jetzt so gemacht:


private void button1_Click(object sender, EventArgs e)
        {
            m_MyRAPI.Connect();
            CERegistryKey rKey = CERegistry.LocalMachine;
            rKey = rKey.OpenSubKey(@"SOFTWARE\MAHA\MOVIN");
            this.tb_Destination.Text = (rKey.GetValue("PATH")).ToString();
        }

Hat zuerst nicht funktioniert da ich versehentlich die Rapi.Connect() nicht ausgeführt hab.
Na so einfach kann es sein.
Jetzt kann geschlossen werden.

Trotzdem vielen Dank

mfg Chris

14.11.2007 - 10:13 Uhr

Vielleicht kann mir damit jemand weiterhelfen:
Ich benutze für meine PC Appl die Opennetcf.Desktop.Communication.dll
Diese stellt die Methode RAPI.Invoke zur Verfügung, die wie folgt aussiehst:


public void Invoke(
   string DLLPath,
   string FunctionName,
   byte[] InputData,
   out byte[] OutputData
);

Über diese Methode müsste ich doch die Methode RegOpenKeyEx der coredll.dll aurüfen können. Oder lieg ich da falsch?

Wenn das geht, wie muss ich dann die Parameter wählen wenn die RegOpenKeyEx so aussieht:


RegOpenKeyEx( 
			uint hKey, 
			string lpSubKey, 
			uint ulOptions, 
			uint samDesired, 
			ref uint phkResult 
			); 


Vielen Dank
mfg Chris

13.11.2007 - 13:23 Uhr

Naja die ist nicht so dolle
Mein Programm soll auf dem PDA installiert werden, deswegen wollt ich bei der Installation vom PC aus den Zeilpfad abfragen und in der Registry des PDA speichern.

Ich hab es jetzt so gemacht dass ich bei jedem Programm start auf dem PDA den PFad in die Reg schreiben lasse. Also wird die RAPI nicht benötigt.

Jetzt hab ich aber schon ne neue Frage.

Ich kann die Reg des PDA nicht vom PC aus auslesen, da seit WM5 manche RAPI Funktionen geblockt werden(ist auch der Grund warum ich die Reg des PDA nicht beschreiben kann).
Hat jemand ne Ahnung wie man das realiesieren kann?
Hab zwar auf der MSDN was gefunden aber ich komm damit leider gar nicht klar.

http://msdn2.microsoft.com/en-us/library/ms890078.aspx

Kann mir vielleicht jemand weiter helfen?
Vielen Dank

mfg Chris

13.11.2007 - 10:57 Uhr

Habs jetzt auf ne andere Art gelöst. Thread kann geschlossen werden.
Danke

13.11.2007 - 08:23 Uhr

Moin Leude.

Ich komm mal wieder nicht weiter.
Ich versuche von einer Desktop Anwendung die Registry eines Pocket Pc zu beschreiben bzw. zu lesen. Dazu benutze ich Die Opennetcf.Desktop.Communication.dll. Aber schon beim Versuch einen Subknoten anzufügen wirft VS2005 einen Fehler.


private void button1_Click(object sender, EventArgs e)
        {
            m_MyRAPI.Connect();
            CERegistryKey reg = CERegistry.Users;
            CERegistryKey rKey = null;
            rKey = reg.CreateSubKey("movin");
        }

Es wird auf die letzte Zeile rKey = ... mit dieser Fehlermeldung(An error occured creating the registry key.) gezeigt.

Ich hab irgendwo gelesen dass es Rapi Security einstellungen gibt, aber ich find darüber nichts hilfreiches. Hat von euch jemand eine Ahnung was ich machen muss dass ich die Registry des Pocket Pc beschreiben kann?

Vielen Dank
mfg Chris

30.10.2007 - 09:30 Uhr

Ok Danke das wollt ich wissen.

30.10.2007 - 09:24 Uhr

Danke für dir Antworten
Aber die Desktop.Communication funktioniert doch nur in einer Desktop Anwendung aber nicht in einer Pda Anwendung.
Oder ist es besser eine Desktop Schnittstelle zu schreiben die den Transfer abwickelt?

30.10.2007 - 08:39 Uhr

Moin Leude
Gibt es eine Möglichkeit Files vom Pda auf den Pc zu kopieren mittels einer Pda Anwendung. Was ich bis jetzt dazu gefunden habe ist die Rapi.dll aber die kann ich doch nur mit einer Pc Anwendung nutzen oder lieg ich da falsch.
Bin um Anregungen sehr dankbar.

mfg Chris

29.10.2007 - 17:30 Uhr

Vielen Dank
Ich schaus mir durch und Fragen kommen sicher noch 😁

29.10.2007 - 14:47 Uhr

@proper_csharp:
Hast du das hinbekommen? Ich hab mir auch das paket geladen aber ich bekomm unter CF 2.0 4 Fehlermeldungen:

  1. "System.Windows.Forms.Application" enthält keine Definition für "StartupPath"
  2. "System.Runtime.InteropServices.StructLayoutAttribute" enthält keine Definition für "Pack".
    3.= 4. Der Typ- oder Namespacename FileVersionInfo ist im Namespace System.Diagnostics nicht vorhanden. (Fehlt ein Assemblyverweis?)

Vielen Danke
mfg Chris

29.10.2007 - 10:38 Uhr

Moin Leude
ich sitz immer noch am Splashscreen und hab auch wieder ne Frage bzw. würde gern Anregungen von euch haben. ich weis ned ob ich mich in die richtige Richtung bewege.
Also ich will einen Splashscreen zwischen den Fromwechslen anzeigen. Der Splash hat ein Label auf dem folgendes stehen soll:

Loading -> Loading. -> Loading.. -> Loading... -> Loading -> usw

Um diesen Screen anzeigen zu können hab ich mir eine Splasher Klasse geschrieben:

public class Splasher
    {
        static private fr_Splash m_sSplash = null;
        static Thread m_tSplashThread = null;

        static Splasher()
        {
        }

        static void Show()
        {
            m_sSplash = new fr_Splash();
            m_sSplash.ShowDialog();
        }

        static public void ShowSplash()
        {
            if (m_tSplashThread != null)
                return;
            m_tSplashThread = new Thread(new ThreadStart(Splasher.Show));
            m_tSplashThread.Start();
       }

        static public void CloseSplash()
        {
            if (m_tSplashThread == null)
                return;
            if (m_sSplash == null)
                return;
            try
            {
                m_sSplash.Close();
            }
            catch (Exception)
            {
            }

            m_sSplash = null;
            m_tSplashThread = null;
        }
    }

die fr_Splash schaut so aus:


public partial class fr_Splash : Form
    {
        System.Windows.Forms.Timer m_tLoad;

        public fr_Splash()
        {
            InitializeComponent();
        }

        private void fr_Splash_Load(object sender, EventArgs e)
        {
        }

        private void fr_Splash_Activated(object sender, EventArgs e)
        {
            m_tLoad = new System.Windows.Forms.Timer();
            m_tLoad.Interval = 500;
            m_tLoad.Tick += new EventHandler(Loading);
            m_tLoad.Enabled = true;
        }

        private void Loading(object sender, EventArgs e)
        {
            switch (lb_Loading.Text)
            {
                case "Loading":
                    this.lb_Loading.Text = "Loading.";
                    break;
                case "Loading.":
                    this.lb_Loading.Text = "Loading..";
                    break;
                case "Loading..":
                    this.lb_Loading.Text = "Loading...";
                    break;
                case "Loading...":
                    this.lb_Loading.Text = "Loading";
                    break;
                default:
                    break;
            }
        }

        private void fr_Splash_Closing(object sender, CancelEventArgs e)
        {
            m_tLoad.Enabled = false;
        }
    }

Der Ablauf im Programm schaut so aus dass sich auf der Form1 ein Button befinden. Drück man diesen wird eine 2te Form geladen.
Sieht unugefähr so aus:


private void btn_Test_Click(object sender, EventArgs e)
{
     Test test = new Test();
     Splasher.ShowSplash();
     this.Hide();
     test.ShowDialog();
}

Im Activate Event der Test Form schliesse ich den Splashscreen mit Splasher.CloseSplash();

Soweit funktioniert es auch, nur wenn das Programm beendet wird, ist der Splashscreen immer noch aktiv und wird angezeigt.

Bitte ned lachen ich schäm mich eh schon weil ich das nur durch rumprobieren und Codeschnippsel hinbekommen hab. X(

Ich wär euch echt dankebar wenn ihr ein paar Tipps hättet.
Vielen Dank
mfg Chris

24.10.2007 - 13:09 Uhr

Sorry hab gedacht dass es dazu passt!

24.10.2007 - 11:54 Uhr

[EDIT]Abgeteilt von Splashscreen erstellen, aber wie richtig?[EDIT]

Moin Leude
Ich arbeite gerade an einer Anwendung für ein PDA(Windows Mobile 5.0) mit VS2005 Prof Cf 2.0. Meine Frage hat natürlich auch mit einem Splashscreen zu tun.
Also: Ich habe eine MainForm aus dieser ich eine 2te Form aufrufe. Die 2te Form liest im FormLoad Event eine Txtdatei(200K) aus. Da das Auslesen Zeit in Anspruch nimmt, wird beim Fromwechsel der Hintergrund(OS oder Explorer) sichtbar. Dies wollt ich durch einen Splash verdecken.

Der FormLoad der 2ten Form sieht ungefähr so aus:


private void Test_Load(object sender, EventArgs e)
        {
            fr_Splash splash = new fr_Splash();
            splash.Show();
            Application.DoEvents();
            
            //Auslesen der Datei und Einfügen in ein TreeView

            splash.Close();
        }

Jetzt hab ich nur noch das Problem das der Hintergrund beim Formwechsel von Splash zu 2ten From auch ganz kurz sichtbar wird.
Kann ich das irgendwie unterbinden?´

Vielen Dank und ich hoffen ihr versteht was ich meine
mfg Chris

16.10.2007 - 10:49 Uhr

Moin
nur aus Interesse. Wäre es bei diesem Problem falsch auf das listview1_ItemActivate Ereignis zu reagieren?

16.10.2007 - 08:29 Uhr

Hi felixfkccc

Das soll jetzt hier kein Spam und Tadel sein aber deine Art nach Hilfe zu bitten ist ein bisschen forsch. Die Leute hier helfen dir gerne wenn man merkt dass du selber nicht mehr weiter kommst. D.h. aber auch das du in erster Linie selber suchen sollst. Ich bin mit Sicherheit noch sehr unerfahren in c# und haben auch viele Fragen aber meiner Vorgehensweise ist:

  1. Suche im Forum nach allen Begriffen die irgdenwie mit deinem Problem zu tun haben, du wirst dich wundert wieviele Threads es gibt die ungefähr das gleiche Problem haben.

  2. Hat die Suche nix gebracht dann googel mal danach. MSDN oder auch andere Foren haben auch Tipps

  3. Hat das noch nichts gebracht (ich bin auch ne faule Sau deswegen kommt es jetzt erst) dann lies mal im openbook: Visual C# nach(steht hier llinks gleich unter den Ressourcen)

4.Wenn alle Stricke reissen stell dein Problem hier rein aber definiere es so gut es geht, dann wird dir sicher gern und schnell geholfen.

Wie gesagt soll kein Tadel sein. Aber es gibt immer mehr Threads in denen ein Problem beschrieben wird aber immer auf andere Threads verwiesen wird. Das macht die Suche im Forum auch nicht einfacher.

15.10.2007 - 10:20 Uhr

Ich denk auch dass es übertrieben wäre.
Aber danke für den Tipp, bin immer dankbar für alle Anregungen.

15.10.2007 - 10:10 Uhr

@Dany-K

Hab mich da vertippt aber daran liegt es nicht, trotzdem danke.

@Herbivore
na auf dich is halt immer verlass, bin zuerst aus der MSDn nicht schlau geworden.
Ich hab jetzt mein Klasse Tester public gemacht und es geht.
Ist das auch elegant oder gibt es auch ne Möglichkeit mit der man nicht gleich die ganze Klasse public machen muss?

15.10.2007 - 09:58 Uhr

Moin Leude

Tut mir leid dass ich euch wieder mit so einer Frage nerven muss aber ich habe im Forum keine Lösung gefunden.

Also ich habe eine Loginform (wird keine Frage zu Logins) auf der ich im FormLoad Objecte "Benutzer" erstelle. Die Daten lese ich aus einer Datei aus und die Objekte werden in einer ArrayList gespeichert. Nach Eingabe des Usernames und des PWs soll das passende Objekt an die 2te Form übergeben werden.


if (this.tb_Password.Text == ((Tester)tester_List[index]).Get_Password)
            {
                Form2 new_Form2 = new Form2((Tester)tester_List[index]);
                new_Form2.Show();
                this.Close();
            }

Der Konstrukter der 2ten From erwartet auch ein Objekt:


public From2(Tester tester)
        {
            InitializeComponent();
            this.tester = tester;
        }

Die ArrayList ist ein Attribut der Klasse Login und die Klasse From2 hat auch ein Attrubut Tester tester.

Beim Kompillieren bekomm ich folgendes:
Inkonsistenter Zugriff: Parametertyp "Test.Tester" ist weniger zugreifbar als Methode "Test.Form2.From2(Test.Tester)"

Ich weis ja dass meine ArrayList wie auch die darin gespeicherten Objekte private sind, aber durch die Übergabe soollte es doch funktionieren.
Was mach ich denn hier falsch?

Vielen Danke
mfg TheBrain24

07.03.2007 - 15:59 Uhr

Aber du wirst doch sicher bestimmen wollen wohin der Text gezeichnet wird? oder versteh ich da was falsch?

07.03.2007 - 14:43 Uhr

Na was für ein Zufall.
Genau dasselbe hab ich auch probiert und einigermasen hinbekommen.
Ich hab ne PictureBox in die ich über DrawString einen Text zeichnen möchte.
Naja aber wo bekomm ich den Text her...? Da hab ich mir auch gedacht ne Textbox zunehmen. Läuft bei mir folgendermasen ab:

Ich wähle über ein Menü aus dass ich jetzt einen Text zeichnen möchte, dann klicke ich in die PictureBox, es wird eine TextBox erstellt in die ich den Text einegeben kann, wird nun die Eingabe mit "Enter" bestätigt wird der Text aus der Textbox der DrawString-Methode zugewisen. Danach wird dann die TextBox gelöscht. Hab keine Ahnung ob es elegant ist... ich denke mal das es anders schoöner zulösen is...aber es funktioniert.


private void schriftToolStripMenuItem_Click(object sender, EventArgs e)
        {
            drawStatus = this.schriftToolStripMenuItem.Text;
            this.pictureBox1.Cursor = Cursors.IBeam;
        }

Damit sage ich dass ich einen Text zeichnen möchte.


private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
        {
            if (drawStatus == "Schrift")
            {
                RichTextBox rtb = new RichTextBox();
                rtb.Location = new Point(e.X, e.Y);
                rtb.SelectionFont = new Font("Verdana", 12, FontStyle.Bold);
                rtb.SelectionColor = mainPen.Color;
                rtb.BorderStyle = BorderStyle.FixedSingle;
                rtb.KeyPress += new KeyPressEventHandler(this.rtb_KeyPress);
                this.pictureBox1.Controls.Add(rtb);
            }
        }

Hier wird die Position in der PictureBox angeklickt und die Textbox erstellt


private void rtb_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == '\r')
            {
                RichTextBox rtb = (RichTextBox)sender;
                grafik.DrawString(rtb.Text, new Font(FontFamily.GenericSansSerif, 15), new SolidBrush(Color.Yellow), new PointF(startX, startY));
                pictureBox1.Image = btm;
                pictureBox1.Controls.Remove(rtb);
            }
        }

Hier frage ich nach "Enter" ab, zeichne den Text und lösche die Textbox.

Würd gern eure Meinung hören ob das einigermasen passt oder obs anders besser wäre.

Mfg TheBrain

15.02.2007 - 19:33 Uhr

Moin Leude

Erstmal zu meiner ersten Frage:
Ich habe ein LAN und würde gerne die teilnehmenden Systeme anzeigen lassen.
Die IP-Zuweisung erfolgt dynamisch.

Dazu hab ich hier im Forum folgenden Beitrag gefunden und hab das erste Beispiel in mein Programm eingefügt:
http://www.mycsharp.de/wbb2/thread.php?threadid=1474&hilight=Netzwerk

Leider bekomm ich keine Teilnehmer.(Und ja es sind welche im Netz 🙂)
Mach ich was falsch? Oder gibts ein Problem mit den dynamischen IP´s?

Meine zweite Frage:
Ich habe einen Teilnehmer im Netz von dem ich auch die IP weis.
Es wird auf diesen Teilnehmer etwas gestreamt. zb ein Video.
Kann ich irgendwie rausbekommen wann dieser Stream zuende ist, wenn ich nicht weis durch welches tool gestreamt wird.
(Meine Idee ist diese: Ich kenn die IP und kann doch sicher irgendwie rausbekommen wann etwas zu dieser IP geschickt wird, also kann ich auch abfragen wann dieser Vorgang zuende ist).

Ich bitte euch mir zu dieser Frage keine Codes zu schreiben, da ich es selber rausfinden will. Ich bitte euch nur um ein paar Stichworte nach denne ich suchen kann.

Vielen Dank

06.09.2006 - 13:16 Uhr

Moin
Ich hab nochmal ne Frage.
Ich füge einer XML datei mit


XmlElement newNode = csprojDoc.CreateElement("TagName");

einen neuen Knoten hinzu. Wenn ich die Xml dann öffne steht hinter "TagName" das Attribut "xmlns=''".
Weis jemand wie ich unterbinden kann dass dieses Attribut erstellt wird?

06.09.2006 - 11:33 Uhr

Habs selber rausbekommen.
Zwar bisschen umständlich aber es geht.

06.09.2006 - 10:24 Uhr

Moin Leude

Ich hab folgendes Problem:
Ich möchte die .csproj druchsuchen und an einer bestimmten Stellen etwas hinzufügen.
Die csproj Datei sieht so aus:


<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>8.0.50727</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{AC684A47-D5C2-424F-8ACC-A4F66FFC54D1}</ProjectGuid>
    <OutputType>WinExe</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>Namen</RootNamespace>
    <AssemblyName>Namen</AssemblyName>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Deployment" />
    <Reference Include="System.DirectoryServices" />
    <Reference Include="System.Drawing" />
    <Reference Include="System.Messaging" />
    <Reference Include="System.ServiceProcess" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Form1.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="Form1.Designer.cs">
      <DependentUpon>Form1.cs</DependentUpon>
    </Compile>
    <Compile Include="Program.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <EmbeddedResource Include="Form1.resx">
      <SubType>Designer</SubType>
      <DependentUpon>Form1.cs</DependentUpon>
    </EmbeddedResource>
    <EmbeddedResource Include="Properties\Resources.resx">
      <Generator>ResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
      <SubType>Designer</SubType>
    </EmbeddedResource>
    <Compile Include="Properties\Resources.Designer.cs">
      <AutoGen>True</AutoGen>
      <DependentUpon>Resources.resx</DependentUpon>
    </Compile>
    <None Include="Properties\Settings.settings">
      <Generator>SettingsSingleFileGenerator</Generator>
      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
    </None>
    <Compile Include="Properties\Settings.Designer.cs">
      <AutoGen>True</AutoGen>
      <DependentUpon>Settings.settings</DependentUpon>
      <DesignTimeSharedInput>True</DesignTimeSharedInput>
    </Compile>
  </ItemGroup>
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
</Project>

Ich möchte an das 2te ItemGroup Tag springen und dort einen neuen Knoten einfügen.Ich hab folgendes versucht:


XmlTextReader csXmlReader = new XmlTextReader(csprojFileName[0]);
            XmlDocument csprojDoc = new XmlDocument();
            csprojDoc.Load(csXmlReader);
            csXmlReader.Close();

            for (int i = 0; i < arrLang.Count; i++)
            {
                if (!csArray.Contains("<EmbeddedResource Include=" + fileName.Substring(0, fileName.LastIndexOf(".")) + "." + arrLang[i] + ".resx>"))
                {
                    XmlElement root = csprojDoc.DocumentElement;
                    XmlNode targetNode = root.SelectSingleNode("/Project/PropertyGroup");

                    XmlElement newNode = csprojDoc.CreateElement("EmbeddedResource");
                    root.InsertAfter(newNode, targetNode);
                }
            }
            csprojDoc.Save("test.xml");

Mein Problem is das ich bei der intitialisierung des targetNodes immer "null" zurückbekomme, obwohl root auf Project gesetzt ist.

Weis jemand warum ode kann mir vielleicht jemand nen Tipp geben.

Vielen Dank

05.09.2006 - 08:02 Uhr

Oh mein Gott...so einfach wärs gewesen.
Danke

04.09.2006 - 16:24 Uhr

Moin Leude

Kann man einem aktiven Fenster irgendwie den Focus entziehen,also das es noch sichtbar bleibt aber sich denoch im Hintergrund befindet?

Hab mir auch schon die ganze USER32 durchgelesen,aber in der finde ich auch nix passendes.

Vielen Danke
Mfg TheBrain

31.08.2006 - 11:12 Uhr

Danke aber könntest mir vielleicht nen kleinen Code Fetzen geben.
Hab grad keine Ahnung wie ich damit umzugehen hab.
Vielen Dank

31.08.2006 - 10:37 Uhr

Moin Leude

Ich möchte eine Anwendung schreiben, die Tastendrücke durch Buttonklicks simuliert und die dann an eine andere Anwendung schickt. Dazu hab ich dieses Bespiel gefunden, welches mit einem Buttonklick eine Aufgabe an den Calculator schickt.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace VirtuellesKeyboard
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // Get a handle to an application window.
        [DllImport("USER32.DLL")]
        public static extern IntPtr FindWindow(string lpClassName,
            string lpWindowName);

        // Activate an application window.
        [DllImport("USER32.DLL")]
        public static extern bool SetForegroundWindow(IntPtr hWnd);


        private void button1_Click(object sender, EventArgs e)
        {
            IntPtr calculatorHandle = FindWindow("SciCalc", "Calculator");

            // Verify that Calculator is a running process.
            if (calculatorHandle == IntPtr.Zero)
            {
                MessageBox.Show("Calculator is not running.");
                return;
            }

            SendKeys.Send("1");
        }
    }
}

Meine Frage:

Wie bekomm ich den lpClassName und lpWindowName von anderen Anwendungen ( leere Test.txt die im Editor geöffnet is)herraus.

Ich hoffe ihr versteht meine Frage
Vielen Dank schon in Vorraus.

28.08.2006 - 16:51 Uhr

Moin
bin selber draufgekommen.
Einfach .SetAttribute mehrfach aufrufen.

28.08.2006 - 15:12 Uhr

Moin

mit setAttribute kannst ein Attribute hinzufügen.


 XmlElement newCd = doc.CreateElement("Name des neuen Knotens");
 newCd.SetAttribute("Name des Attributes", "Value des Attributes");

Wenn das Attribute schon enthalten ist wird nur der Wert überschrieben.
Ich hoff mal das dies richitg is, kannst aber auch in der Hilfe unter XmlElements.SetAttribute nachelesen.

Was mich aber noch interessieren würde ist wie man mehrere Attribute erstellen kann.
Wäre sehr dankbar

24.08.2006 - 11:44 Uhr

Moin

Vielen Dank für das Tutorial,ist echt gelungen!

Natürlich kann man noch Erweiterungen einbauen(zb. nach einem bestimmten Text in der Datei suchen), aber dann würde es sicher zu Umfangreich werden und man könnte gleich nen Buch schréiben.

Also nochmals vielen Dank.

17.08.2006 - 08:07 Uhr

Omg...ich stand echt aufm Schlauch



public int Min
        {
            get
            {
                return hScrollBar1.Minimum;
            }

            set 
            {
                
                hScrollBar1.Minimum = value;
            }
        }

        public int Max
        {
            get
            {
                return hScrollBar1.Maximum;
            }

            set
            {
                
                hScrollBar1.Maximum = value;
            }
        }


jetzt gehts auch!
Aber wie man alle Eigenschaften freigeben kann würde mich schon noch interessieren.

17.08.2006 - 08:02 Uhr

Also ich glaub ich steh aufm Schlauch...
ich hab es für die ScrollBar mal so probiert:



public int Min
        {
            get
            {
                return hScrollBar1.Minimum;
            }

            set 
            {
                
                min = hScrollBar1.Minimum;
            }
        }

        public int Max
        {
            get
            {
                return hScrollBar1.Maximum;
            }

            set
            {
                
                max = hScrollBar1.Maximum;
            }
        }


Es werden mir auch die Eigenschaften Min und Max angezeigt aber ich kann sie nicht ändern.
Wie gesagt ich hab zum erstenmal mit eigenen Steuerelementen zu tun und leider hab ich nur ein Grundlagen Buch in welchem zwar auf Properties angesprochen werden aber nicht ausführlich erklärt werden.
Also bitte nachsichtig sein.
Danke.

Gibt es eine Möglichkeit alle Eigenschaften eines untergeordneten Steuerelements freizugeben?

17.08.2006 - 07:31 Uhr

Danke für die schnelle Antwort.

16.08.2006 - 16:24 Uhr

Moin Leute

Ich hab mir ein eigenes Steuerelement, das eine Scrollbar und eine PictureBox enthält geschrieben.
Wie kann ich jetzt das Maxium und Minimum der Scrollbar ändern nachdem ich das Steuerelement eingefügt hab?
Ist sicher was kleines aber ich komm eben ned drauf und hab uach keine Lösung im Net oder Forum gefunden.
Vielen Dank schonmal.

07.03.2006 - 20:45 Uhr

Nochmals Danke!