Laden...

Forenbeiträge von Nisbo Ingesamt 21 Beiträge

26.08.2015 - 13:49 Uhr

thx, ((Button)sender).Name hat das Problem beseitigt 😃

26.08.2015 - 13:27 Uhr

Ich habe eine ausgelagerte Klasse in der ich gerne den Sender überprüfen will um zu sehen welcher Button geklickt wurde. (Rechtsklick auf Button)

Die schaut so aus

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Delta_Oskar_One
{
    class CallSpeichern
    {
        public static void CallButtonSpeichern(int nummer, string call, object sender, MouseEventArgs e)
        {
            // 
            if (e.Button == MouseButtons.Right && sender == buttonCall1)
            {
                DialogResult result1 = MessageBox.Show(call + " als Call 1 speichern ?", "Call 1 speichern" + sender, MessageBoxButtons.YesNo);
                if (result1 == DialogResult.Yes)
                {
                    //  
                }
            }
        }
    }
}

aufrufen tue ich das im Hauptform im MouseDown des jeweiligen Buttons

        private void button23_MouseUp(object sender, MouseEventArgs e)
        {
            CallSpeichern.CallButtonSpeichern(1, textBox3.Text , sender, e);
        }

Der Code

... && sender == buttonCall1)

funktioniert im Hauptteil aber nicht in der ausgelagerten Klasse, dort bekomme ich als Meldung das buttonCall1 nicht vorhanden ist.

Was ist da falsch gelaufen außer meine eigene Unwissenheit ? Bzw besser gefragt wie bekomme ich das hin das es funktioniert ?

25.08.2015 - 15:45 Uhr

OK Problem gelöst

25.08.2015 - 14:54 Uhr

Mmm sorry bin noch neu dabei, was ist ein Scope ?

25.08.2015 - 14:48 Uhr

Servus,

ich möchte ein einem Thread eine Datei downloaden, dazu benötige ich die Angabe welche Datei. Die Datei wird in einer ComboBox ausgewählt.

Da ich aber aus dem Thread ja nicht ohne weiteres auf die Combobox zugreifen kann habe ich über die Suchfunktion raus gefunden das man mit invokes arbeiten soll.

OK soweit so gut, ich frage also in meiner Funktion für den Thread den selected Index der ComboBox ab

                if (this.comboBox2.InvokeRequired)
                {
                    this.comboBox2.Invoke((MethodInvoker)delegate (){ int ddd = comboBox2.SelectedIndex; });
                }
                else
                {
                    int ddd = comboBox2.SelectedIndex;
                }

an Hand von ddd möchte ich jetzt die passende ID für den WebClienten setzen, also den URL Parameter

                string iii = "";
                if (ddd == 1) iii = "262";// Deutschland
                if (ddd == 2) iii = "232";// Österreich
                if (ddd == 3) iii = "228";// Schweiz

So jetzt sagt mit der Compiler das ddd im aktuellen Content nicht vorhanden ist.

Woran liegt das jetzt schon wieder ?

24.08.2015 - 17:06 Uhr

Da ich ja damit kein Geld verdienen will sondern anderen kostenlos helfen will werde ich wohl keine Projekte ausschreiben 😉

Werde mir das mit dem Array mal anschauen aber vermute jetzt mal schon das es beim schreiben wieder scheitern wird da es das falsche Format ist 😄 😄 😄

Ist halt gerade der Punkt wo es in viele verschiedene Richtung auseinander läuft, halt zu viele Problem auf einmal trotz der eigentlich guten Idee di eman hatte (zumindest in meinem Kopf) man traut sich nicht mehr zu fragen wegen genau diesem Punkt:

Es darf eben nur nicht der Eindruck entstehen das du andere die Arbeit machen läßt und du dich selbst nicht wirklich bemühst ...

Die geöffneten Browsetabs gehen in die "Millionen" und bei der Hälfte der Beiträge steht die selbe Frage ohne Antwort oder benutze google oder die Suchfunktion ^^

So jetzt versuche ich mal mich etwas hin zu legen, habe wieder Nachtschicht wo ich mich dann nebenbei um die Array Geschichte kümmern kann.

24.08.2015 - 16:46 Uhr

Habe leider keinerlei Ahnung wie ich das anstellen kann und will euch mit der Frage nicht auf den Keks gehen 😉

24.08.2015 - 16:21 Uhr

Ja den BinaryWriter habe ich ja schon eingebaut, mein Problem ist ja genau dort wo Du es erkannt hast ^^

In deinem Code vermischst du aber alles, und daher kommt etwas anderes dabei heraus, also du dir wünschst.

im Bezug auf

Wie gesagt, der Debugger würde dir dabei helfen, wenn du es mal ausprobierst.

muss ich dann wirklich mal versuchen mich damit zu beschäftigen, wird dann aber vermutlich wie immer bei mir eine Aufgabe des Projektes werden 😄 😄: D

PS: Wenn du vorhast, Bytes an einer bestimmten Stelle zu ändern, wäre es evtl. einfacher, die Daten mit  File.ReadAllBytes in ein Array auszulesen, die Daten an der richtigen Stelle im Array zu ändern, und dann wieder in eine Datei zu schreiben. 

Na ich will ja nicht nur ein paar Bytes ändern sondern ca 1 MB an Daten und zumindest klingt das so im Moment für mich komplizierter als das was ich mache

Auf jeden Fall erstmal danke für Deine Hilfe 😃

24.08.2015 - 16:01 Uhr

Erklären wir es mal so an Hand von Automodellen, ich habe verschiedene Konfigurationsdateien für verschiedene Funkgeräte, der Hersteller war so clever diese nicht in einem "lesbaren" Format zu speichern. ^^

Diese Konfigurationsdateien funktionieren beim selben Modell untereinander, sprich
Radioeinstellungen beim VW Golf geht untereinander, also die Config von einem Golf geht in einem anderen Golf.

Will ich jetzt meinen Radioeinstellungen vom VW Golf in das Radio vom VW Polo einspielen dann akzeptiert die Programmiersoftware die Config nicht.

Um das zu Umgehen muss man der Programmiersoftware vortäuschen das es sich doch um einen Polo handelt. Diese Information stehen in der Config bis zum Offset 0x0032F

Ich kopiere jetzt also diese Information das es sich um einen Polo handelt aus der Config vom Polo an genau die Selbe Stelle der Config vom Golf und mache somit aus der Config vom Golf eine Config für den Polo.

Ich hoffe das war soweit verständlich worum es geht.

Im Hexeditor geht das ruck zuck, ich markiere die entsprechenden Zeilen, kopiere sie, markiere im anderen File die selbe Stelle, füge sie und und speicher die Datei.

Das Ganze will ich jetzt automatisch erledigen lassen da wir im Amateurfunkbereich auch Leute haben (meistens die schon etwas älteren so um die 60/70) welche mit sowas nicht mehr klar kommen. Aus dem Grund will ich ein kleines Programm basteln. Und natürlich auch für die eigene Faulheit ^^

Das verkettet einfach die Zahlenwerte (0...255) miteinander zu einem String. Wenn du hexadezimale Werte benötigst, mußt du die entsprechende Formatierungsregel anwenden.

ja das habe ich mir auch so gedacht nur halt keine Lösung ^^
Ich muss ja nur das was ich lese im selben Format wieder speichern und da stehe ich auf dem Schlauch, ein br2.WriteByte() gibt es nicht

24.08.2015 - 08:43 Uhr

werde mir das mal angucken, momentan habe ich das mit dem festen Wert gelöst aber da gibts jetzt aber zwei Probleme

hier der Code fürs auslesen der 2. Datei

BinaryReader br2 = new BinaryReader(File.OpenRead(openFileDialog2.FileName));
            
            string vorlageConfig = null;
            for (int i = 0x00330; i <= 0x12690A; i++)
            {
                br2.BaseStream.Position = i;
                // vorlageConfig += br2.ReadByte().ToString("X2");
                zusammen += br2.ReadByte();
            }
            br2.Close();
            
            saveFileDialog1.ShowDialog();

            BinaryWriter bw = new BinaryWriter(File.OpenWrite(saveFileDialog1.FileName));
            bw.Write(zusammen);

            bw.Close();

Jetzt habe ich einmal das Problem das er wenn ich den Rest der 2. Datei (1,2 MB groß) auslese in den 60 Sekunden TimeOut geht so lange ich
** zusammen += br2.ReadByte();**
drin habe

Habe das dann mal auskommentiert um zu sehen ob er wenigstens richtig speichert und wollte halt nur den ersten Teil speichern aber da kommt dann was ganz anderes raus als in der Quelldatei
getestet mit
zusammen += br.ReadByte();
und
zusammen += br.ReadByte().ToString();

24.08.2015 - 06:17 Uhr

Vielen dank, das war das was ich gesucht habe, das Auslesen klappt schon mal

        private void button1_Click(object sender, EventArgs e)
        {
            openFileDialog1.ShowDialog();
            openFileDialog2.ShowDialog();

            BinaryReader br = new BinaryReader(File.OpenRead(openFileDialog1.FileName));

            string eigeneConfig = null;
            for (int i = 0x00000; i <= 0x00032F; i++)
            {
                br.BaseStream.Position = i;
                eigeneConfig += br.ReadByte().ToString("X2");
            }
            br.Close();

            richTextBox1.Text = eigeneConfig;



            BinaryReader br2 = new BinaryReader(File.OpenRead(openFileDialog2.FileName));

            string vorlageConfig = null;
            for (int i = 0x00000; i <= 0x00032F; i++)
            {
                br2.BaseStream.Position = i;
                vorlageConfig += br2.ReadByte().ToString("X2");
            }
            br2.Close();

            richTextBox2.Text = vorlageConfig;

        }

lese gerade zum testen den selben Bereich in 2 RichTextBoxen ein

bei der 2. Box muss ich dann ja ab 330 lesen
for (int i = 0x00330; i ≤ ???????; i++)

nur wie sage ich dem Programm das es bis zum Ende der Datei lesen soll ?
ein br2.lenght gibt es nicht, schaut aber so aus als wenn die Dateien alle bis 0x12690A gehen

und dann muss ich ja noch die beiden Daten zusammen legen, macht man das mit nem String ?
Also dann eigeneConfig + vorlageConfig verketten um das dann so direkt wieder mit BinaryWriter zu schreiben ?

Naja egal das kann ich auch selber irgendwie testen wenn ich weiß wie ich bis zum Ende lese^^

23.08.2015 - 16:45 Uhr

Servus,

ist es möglich mit C# Hex Dateien zu bearbeiten ?
Was ich machen möchte ist eine Hex Datei einlesen und einen Teil davon (0 bis 390) an die selbe Stelle einer 2. Hexdatei kopieren.

Geht darum die Programmierung der Kanäle eines Amateurfunkgerätes auf ein anderes Modell zu kopieren, also nichts illegales 😉

Habt ihr evtl ein paar Stichpunkte womit ich Google füttern kann ?

23.08.2015 - 10:00 Uhr

PHP geht auch Objektorientiert ^^
Mag ich genau so wenig 😄 😄 😄

Ich weiß das es ganz toll ist wenn man es versteht nur ich fühle mich da immer wie in einer deutschen Behörde.

Am Eingang fragt man wo bekommt man den Führerschein, der sagt gehe Raum 123
dort angekommen muss man dann aber in Raum 231 um Formular B beantragen zu können, dort muss man aber für de Beantragung erst Formular A haben was es in 345 gibt. Für 345 braucht man aber Zugangsberechtigung C die es bei 555 gibt 😄 😄 😄

Ich habe halt Code gerne zusammen, da habe ich es im Überblick und muss mich nicht durch 10 Dateien klicken. Aber liegt halt an mir, habe den Draht das alles was man in 10 Zeilen in eine Datei packen kann dann wohl in 9 Dateien mit jeweils 20 Zeilen auslagert 😄 😄 😄

Aber kommt evtl ja schon noch, der erste Schritt ist getan und eine Funktion oder Methode ist ausgelagert ^^

23.08.2015 - 09:45 Uhr

Ok so einfach ist das ^^
na gut überredet, habe jetzt die Übergabe der combobox mit drin, in der ausgelagerten Datei muss ich dann CB statt comboBox1 übergeben, macht ja auch Sinn

funktioniert freu

23.08.2015 - 09:36 Uhr

Man ist das kompliziert, da ist es doch alles in einer Datei lassen viel einfacher.
Bei PHP gab es ein einfaches include einer Datei und man hatte keinerlei Probleme 😦

Warum ich die Box nicht übergeben will ?
Mal davon abgesehen das ich nicht weiß wie ^^
hätte ich dann das Problem wenn ich aus der Funktion raus z.B. eine textBox befüllen will wieder und muss alles umschreiben, irgendwann habe ich dann 100 Parameter in dem Funktionsaufruf

Glaube bei Objectpascal ging das wen man das Form vorne ran gestellt hat
Form1.combobox

@Tisdo
dann habe ich ja wieder code im Hauptteil und kann mir das Ganze ja eigentlich auch sparen

23.08.2015 - 09:08 Uhr

Jetzt habe ich neue Fehlermeldungen im Bezug auf den Fehlenden Parameter zur Combobox beim Funktionsaufruf und muss wie es ausschaut jedes mal der Funktion eine Combobox mit übergeben, das will ich natürlich nicht und kann auch nicht im Sinne des Erfinders sein.

Da muss es noch nen anderen Weg geben

23.08.2015 - 08:42 Uhr

Danke für die Antwort aber
Combobox CB
will er nicht, sagt der Typ oder Namespacename Combobox wurde nicht gefunden
habe auch schon
comboBox1 CB versucht
geht auch nicht

23.08.2015 - 07:21 Uhr

Servus,

ich (Neuling) hoffe ich habe das richtige Forum gefunden, denke zumindest das es Grundlagen sind woran ich gerade scheiter ^^

Also ich habe vor eine Funktion oder Methode wie sie hier wohl genannt wird in eine andere Datei auszulagern so das der Code nicht zu viel wird in der "Hauptdatei"

Also habe ich eine Klasse hinzugefügt
Projekt --> Klasse hinzufügen --> Klasse und auf hinzufügen geklickt
Habe die Datei umbenannt in RepeaterLaden.cs

dort ist dann das hier drin:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Delta_Oskar_One
{
    class RepeaterLaden
    {
    }
}

Jetzt habe ich meine Funktion:

        private void RepeaterListeLaden(int laden)
        {
            // Repeater Liste einlesen
            if (laden == 1)
            {
                // Download aktuelle Liste
                WebClient webClient = new WebClient();
                webClient.DownloadFile("http://www.egal.de", @"RepeaterListe.txt");
            }

            // Liste leeren
            comboBox1.Items.Clear();

            try {
                string[] lineOfContents = System.IO.File.ReadAllLines("RepeaterListe.txt");
                foreach (var line in lineOfContents)
                {
                    // HTML entfernen, warum auch immer das da angezeigt wird ;)
                    string v = line.Replace("<BR />", "");

                    string[] tokens = v.Split(',');

                    int intValue;
                    Int32.TryParse(tokens[0].Trim(), out intValue);

                    if (intValue >= 262000 && intValue <= 263000)
                    {   
                        comboBox1.Items.Add(tokens[1] + " - " + tokens[0]);
                    }
                }

                if (laden == 1) MessageBox.Show("Repeater Liste wurde aktualisiert.");
            }
            catch
            {   
                RepeaterListeLaden(1);
            }

        }

in die Ausgelagerte Datei verschoben was dann so aussieht:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Delta_Oskar_One
{
    class RepeaterLaden
    {
        private void RepeaterListeLaden(int laden)
        {
            // Repeater Liste einlesen
            if (laden == 1)
            {
                // Download aktuelle Liste
                WebClient webClient = new WebClient();
                webClient.DownloadFile("http://www.egal.de", @"RepeaterListe.txt");
            }

            // Liste leeren
            comboBox1.Items.Clear();

            try
            {
                string[] lineOfContents = System.IO.File.ReadAllLines("RepeaterListe.txt");
                foreach (var line in lineOfContents)
                {
                    // HTML entfernen, warum auch immer das da angezeigt wird ;)
                    string v = line.Replace("<BR />", "");

                    string[] tokens = v.Split(',');

                    int intValue;
                    Int32.TryParse(tokens[0].Trim(), out intValue);

                    if (intValue >= 262000 && intValue <= 263000)
                    {
                        comboBox1.Items.Add(tokens[1] + " - " + tokens[0]);
                    }
                }

                if (laden == 1) MessageBox.Show("Repeater Liste wurde aktualisiert.");
            }
            catch
            {
                RepeaterListeLaden(1);
            }

        }
    }
}

Im Hauptprogramm wird jetzt natürlich die
RepeaterListeLaden(0);
bemängelt da es die nicht mehr gibt, also habe ich es durch
RepeaterLaden.RepeaterListeLaden(0);
ersetzt, danach wird wieder gemeckert das der Zugriff auf Grund des Schutzgrades nicht möglich ist.

OK also habe ich in der Ausgelagerten Datei die
private void RepeaterListeLaden(int laden)

ersetzt durch
public static void RepeaterListeLaden(int laden)

also aus private ein public gemacht und das static noch eingefügt, public verstehe ich ja noch aber static nicht wirklich. Naja egal zumindest kein Fehler mehr im Hauptprogramm.

In der ausgelagerten Datei werden jetzt noch ein paar Punkte bemängelt
WebClient webClient = new WebClient();
konnte ich durch einfügen von
using System.Net;
im Header beheben

dann noch
using System.Windows.Forms;
in den Header das die **MessageBox **funktioniert

So und jetzt kommt das Problem wo ich nicht weiter komme, ich kann
comboBox1.Items.Clear();
nicht ansprechen, der Ausgelagerte Code sagt
"Der Name "comboBox1" ist im aktuellen Kontext nicht vorhanden, die Fehlerbeschreibung zu CS103 die hier im Forum verlinkt ist hat mir nicht geholfen da dort was von Try erzählt wird und es nicht um ausgelagerte Funktionen geht.

So schaut der Code jetzt insgesamt aus:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Windows.Forms;

namespace Delta_Oskar_One
{
    class RepeaterLaden
    {
        public static void RepeaterListeLaden(int laden)
        {
            // Repeater Liste einlesen
            if (laden == 1)
            {
                // Download aktuelle Liste
                WebClient webClient = new WebClient();
                webClient.DownloadFile("http://www.egal.de", @"RepeaterListe.txt");
            }

            // Liste leeren
            comboBox1.Items.Clear();

            try
            {
                string[] lineOfContents = System.IO.File.ReadAllLines("RepeaterListe.txt");
                foreach (var line in lineOfContents)
                {
                    // HTML entfernen, warum auch immer das da angezeigt wird ;)
                    string v = line.Replace("<BR />", "");

                    string[] tokens = v.Split(',');

                    int intValue;
                    Int32.TryParse(tokens[0].Trim(), out intValue);

                    if (intValue >= 262000 && intValue <= 263000)
                    {
                        comboBox1.Items.Add(tokens[1] + " - " + tokens[0]);
                    }
                }

                if (laden == 1) MessageBox.Show("Repeater Liste wurde aktualisiert.");
            }
            catch
            {
                RepeaterListeLaden(1);
            }

        }
    }
}

Ich hoffe jemand kann mir als C# ANFÄNGER helfen, ist vermutlich für euch ne Kleinigkeit und schneller zu beantworten als einen Let Me Google That For You Link zu posten 😉
Und ja ich google schon danach 😉

EDIT: ach ja ich habe auch schon das versucht
Form1.comboBox1.Items.Clear();
dann meckert das Programm wieder wegen dem Schutzgrad

21.08.2015 - 19:38 Uhr

Habe selbst die Lösung gefunden, naja nicht der Goldrand aber es geht ^^
Ich habe mal Ausnahmsweise den IE gestartet und dort gesehen das die Seite auch nicht funktioniert, also ab ins IE Menü --> Internetoptionen --> Allgemein --> Einstellungen --> Bei jedem Zugriff auf die Webseite
ausgewählt und siehe da es geht.

Diese Option sollte man doch auch über das Programm setzen können oder ?

21.08.2015 - 18:48 Uhr

Das wird nichts bringen da die Seite ja bei manuellen Refresh auch nicht immer aktualisiert, die Daten werden dort mittels javascript aktualisiert

<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="livelog6.js"></script>

Des weiteren ist nach einem Refresh auch teilweise die History der Einträge verloren weswegen ein "F5" nicht wirklich Sinn macht

kannst ja selber mal testen dann siehst du was ich meine

Ich tippe mal eher auf irgendwelche Probleme mit dem Javascript

21.08.2015 - 17:12 Uhr

Servus,

ich bin neu im Forum und auch bei C# 😉
Habe mir heute M$ Visual Studio Community installiert und bin gerade dabei ein Programm zu basteln.

Das Programm enthält eine webbrowser Komponente mit der ich eine sich permanent aktualisierende Webseite einbinde, quasi so was wie User online nur halt für den Amateurfunk.

Das Problem ist das die Seite nicht aktualisiert wird
http://ham-dmr.de/live_dmr/
http://ham-dmr.de/live_dmr/cindex.html (nur der Frame mit den Daten)

manchmal wird die Seite mit Daten geladen, manchmal ohne Daten, automatisch aktualisieren tut sie sich nie.

Am generellen Caching liegt es nicht, andere sich selber aktualisierenden Seiten funktionieren.

Hat jemand eine Idee wie ich ANFÄNGER das am einfachsten lösen kann ?