Laden...
Avatar #avatar-1860.gif
der Marcel myCSharp.de - Member
Ingenieur-Studi Dresden Dabei seit 11.02.2006 564 Beiträge
Benutzerbeschreibung

Forenbeiträge von der Marcel Ingesamt 564 Beiträge

20.04.2006 - 22:31 Uhr

Hi Robert G!

Da war ich tatsächlich etwas unaufmerksam 🤔

der Marcel

20.04.2006 - 22:17 Uhr

Hi!

Da musst du eine neue Klasse schreiben, welche von DateTime erbt 😉

der Marcel

20.04.2006 - 22:16 Uhr

Hi sorny!

MSDN

der Marcel

EDIT: Mist, hab mich zu lange mit der Suche der deutschen Seite aufgehalten 🙂

20.04.2006 - 22:12 Uhr

Hi!

Es kann natürlich sein, dass der Designer das Environment.NewLine() wirklich als Zeilenumbruch ausdrückt, so dass du ein Enter tippen musst 😉

der Marcel

20.04.2006 - 16:13 Uhr

Hi!

Soweit ich weiß, ist die einfache Version von Obfuscator in der VS 2005 Professional-Version enthalten. Im Standard glaube nicht.

der Marcel

20.04.2006 - 15:36 Uhr

Hi!

Das ist doch schön. Nach einem Jahr Freigabe hätte sie IMHO eh niemand mehr gekauft. Bzw das Kopieren der regulär in Umlauf befindlichen ISOs hätte man nicht mehr aufhalten können.

der Marcel

20.04.2006 - 15:32 Uhr

Hi!

Das habe ich dir vorhin beschrieben.

der Marcel

20.04.2006 - 15:27 Uhr

Hi!

Habe mich schon sehr an den "Affengriff" gewöhnt. 😁 Je nach Konfiguration und Windows-Version hat man sofort den TaskManager 😉

der Marcel

20.04.2006 - 15:21 Uhr

Hi!

Indem du die Referenz nicht innerhalb der Klick-Methode erstellst, sondern in der Klasse ein Feld vom Typ frmGruppen deklarierst, welches im Konstruktor initialisiert wird und auf dass du dann von deinen Methoden aus zugreifen kannst.

der Marcel

20.04.2006 - 15:18 Uhr

Hi!

So geht es natürlich auch 🙂 ist eine Frage dessen, wie man es bevorzugt 😉

der Marcel

20.04.2006 - 15:16 Uhr

Hi!

Aus deinem Code kann der Compiler nicht sehen, ob du den Rückgabewert willst oder nicht. Also kann er es nicht unterscheiden 😉

der Marcel

20.04.2006 - 15:15 Uhr

Hi hitzi!

Nein, kann man nicht. Die Methoden werden lediglich mit Hilfe von Delegaten bei Events registriert.

der Marcel

20.04.2006 - 15:13 Uhr

Hi!

Original von w1z4rd2003
das komische ist wenn ich jetzt ein zweites mal ein Wert eingebe und auf OK klicke wird eine zweite Instanz von frmGruppen geöffnet, sodass ich nach jedem klick ein neues frmGruppen offen habe... was ist da falsch?

  
  	private void btnOK_Click(object sender, System.EventArgs e)  
  	{  
  		frmGruppen Gruppen = new frmGruppen(); // <-- Hier machst du immer eine neue Instanz von frmGruppen auf  
  		//Gruppen.txtBox.Text = (this.txtBezeichnung.Text);  
  		Gruppen.lstTurnierelemente.Items.Add(this.txtBezeichnung.Text);  
  		if (Gruppen.ShowDialog() == DialogResult.OK)  
  			 {  
  				Gruppen.lstTurnierelemente.Items.Add(this.txtBezeichnung.Text);  
  			 }  
  	}  
  

das liegt daran, weil du auf den Klick hin immer wieder eine neue Instanz von frmGruppen erstellst und anzeigst!

der Marcel

20.04.2006 - 15:09 Uhr

Hallo bvsn!

Schreibe dir doch eine "Zwischenklasse" welche die Referenz auf das Dataset-Objekt hält. Wenn du diese Zwischenklasse als Singleton implementierst, solltest du von überall her über diese Zwischenklasse Zugriff auf das selbe DataSet-Objekt haben.

der Marcel

20.04.2006 - 15:03 Uhr

Hi plongo!

Schaue dir mal das Thema Methodenüberladungen an. Methoden mit gleichen Namen werden aufgrund ihrer Parameterstruktur unterschieden. (das sind Überladungen). Du könntest es so machen wie jan223 geschrieben hat, was auch ich bevorzugen würde. Der Vollständigkeit halber würde es aber auch gehen, wenn du 2 Parameter miteinander vertauschst, so dass sie an anderer Stelle stehen.

der Marcel

EDIT: @plongo, sorry hatte deinen zweiten Beitrag noch nicht gesehen. Füge für die Methode mit Rückgabewert noch einen bool-Wert in die Parameterstruktur ein. Oder du benennst die Methoden eben anders... 😉

20.04.2006 - 14:58 Uhr

hi hitzi!

Delegaten kapseln Funktionszeiger. Das bedeutet, du deklarierst einen entsprechenden Delegaten mit deiner Methode. Das sieht so aus:

ThreadStart param = new ThreadStart(threadMethod);

Anschließend kannst du den ThreadStart-Delegaten param als Parameter deiner Methode übergeben.

der Marcel

EDIT: herbivore hat dir dir gezeigt, wie deine Methode aussehen muss, die den Delegaten verarbeitet. Mein Code zeigt dir, was du reinsteckst 🙂

20.04.2006 - 11:15 Uhr

Hallo Khemisset!

Sorry, die Erläuterungen von Noodles lassen sich wirklich einfach umsetzen. Daher auch meine Empfehlung. Wollte dir nicht zu nahe treten 😉

der Marcel

20.04.2006 - 11:12 Uhr

Hi w1z4rd2003!

Du könntest auch eine eigene Klasse schreiben, welche von dieser erbt und ToString so überschreiben, wie es deinen Vorstellungen entspricht.

der Marcel

20.04.2006 - 11:10 Uhr

Hallo!

Schau dir mal das Verhalten im abgesicherten Modus an. IMHO werden dabei die meisten Autostartrampen unterdrückt, wodurch auch dein Virus nicht aktiv werden dürfte.
Alternativ auch msconfig per Start-->Ausführen starten und unter Dienste alle MS-Dienste ausblenden und nicht MS-Dienste deaktivieren und neustarten. Mit msconfig und Autoruns (Google-Suche) kannst du auch die restlichen Startrampen unter die Lupe nehmen.

der Marcel

EDIT: @progger: Strg+Shift+Esc geht ja wirklich 🙂 war bis jetzt Anhänger von Strg-Alt-Entf g

20.04.2006 - 11:05 Uhr

hi!

Mache vorher den Test wie ihn frisch vorgeschlagen hat, bevor du etwas veränderst.

der Marcel

20.04.2006 - 10:33 Uhr

Hi w1z4rd2003!

Wenn ich mich nicht irre, werden von der ListBox zur Textausgabe die ToString-Methoden der Objekte benutzt. Du musst nur sicherstellen, dass die ToString-Methoden oder Objekte das ausgeben, was du möchtest.

Einen string kannst du einfach durch Add hinzufügen.

listBox1.Items.Add("Test");

der Marcel

20.04.2006 - 09:05 Uhr

Hi!

Nein, bei mir funktioniert es auch noch, wenn die Form diese Größe hat/größer ist. Hat ja eigentlich auch nichts miteinander zu tun.

der Marcel

20.04.2006 - 01:24 Uhr

Hallo Sacha M!

Mit dem, was du geschrieben hast, klappt es. Wie sieht denn dein Lösungsansatz aus um es auch auf andersprachigen OS zum Laufen zu bekommen? Spontan würde ich sagen, dass ich mir die Gruppennamen aus der Registry oder WMI hole.
Der IPC-Zugriff wird zwar jetzt nicht mehr verweigert, aber ich bin jetzt auf client seite (kein dienst) auf ein weiteres Problem gestoßen. Und zwar möchte ich eine Methode der Konsolenandwenung beim Event des Remote-Objektes registrieren. Bei eben dieser Registrierung kommt eine SecurityException

SecurityException
Der Typ System.DelegateSerializationHolder und die davon abgeleiteten Typen (z.B. System.DelegateSerializationHolder) dürfen in dieser Sicherheitsebene nicht deserialisiert werden.

Hast jemand eine Idee, wie ich an diese Sicherheitsebene komme?

der Marcel

EDIT: Habe jetzt noch folgende Eigenschaften vom provider gesetzt:

provider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;

Nun ist die SecurityException weg aber ebenfalls beim Registrieren kommt nun eine TargetInvocationException

TargetInvocationException
Ein Aufrufziel hat einen Ausnahmefehler verursacht.

Hat jemand eine Idee?

19.04.2006 - 19:03 Uhr

Hallo Cali271!

Deine 1.Form kann eine Methode auf das FormClosed-Event der 2. Form registrieren!

der Marcel

19.04.2006 - 18:58 Uhr

Hi!

Sollen wir das Programm für dich schreiben?
Mir scheint es so, als wenn du dir erst ein paar Grundlagen zu C# (z.B. im guide to C#) aneignen solltest. Dann könntest du die guten Erläuterungen von Noodles umsetzen.

der Marcel

19.04.2006 - 17:09 Uhr

Hi!

Meine Firewall sortiert auch die einzelnen Applikationen, welche zugreifen wollen. 😉

der Marcel

19.04.2006 - 17:05 Uhr

Hi sebo!

The type or namespace name 'Channel' could not be found (are you missing a using directive or an assembly reference?)

Die fehlermeldung sagt aber was anderes. Der namespace von Channel (evtl. Schreibfehler? Groß/Klein?)ist nicht greifbar.


List<Object> groups = new List<Object>();
groups.Add(new List<RssChannel>());

Damit machst du den Vorteil von Generics kaputt. Der ist eben, gerade nicht in object zu casten! 😉

der Marcel

19.04.2006 - 17:00 Uhr

8)Hi Cyron!

welcome @mycsharp.de 8) 👍

der Marcel

19.04.2006 - 16:58 Uhr

Hallo Dexter!

Bei meiner Firewall schaffen die es nicht. Das muss ich explizit freigeben.

der Marcel

19.04.2006 - 16:55 Uhr

Hi!

Wo steht denn diese Klasse? auf jeden Fall in einem anderen namespace.
Das ist aber das normale Vorgehen: Assembly referenzieren und namespace evtl. per using einbinden (schau mal im VS --> dein Projekt --> Verweise nach, kannst du mit Menü Projekt --> Verweis hinzufügen hinzufügen, für ein beispiel der using-Direktive: das VS fügt einige usings automatisch am Dateianfang ein)

der Marcel

19.04.2006 - 16:52 Uhr

Hi Dexter!

Ich kenne keinen Weg eine Firewall zu umgehen. Der Sinn einer Firewall ist ja gerade, die Kanäle zu überwachen. Dürfte bestimmt auch von der Firewall abhängen, ob und wie man sie umgehen kann.
Bei meiner wird der gesamte Netzwerkverkehr überwacht (auch http)!

der Marcel

19.04.2006 - 16:47 Uhr

Hi sebo!

Ist denn Channel eine Klasse von dir oder aus einer Framework-Bibliothek.
Namespaceeinbinden geht über Projektverweis und using-Direktive.

der Marcel

19.04.2006 - 16:45 Uhr

Hallo Sascha M!

Danke für deine Antwort! Wenn ich wieder an der Entwicklungsumgebung bin, werde ich mir das anschauen. Klingt nach einer guten Lösung! Habe bisher die Kommunikationsrichtung umgedreht und versuche es mit Events zu lösen. Der Test steht aber noch aus. Gut anzunehmen, dass das selbe Problem auftritt 🙂

der Marcel

19.04.2006 - 16:42 Uhr

Hallo sebo!

Das liegt aber nicht an der Liste, sondern dass an dieser Stelle in deinem Code der Typ Channel nicht bekannt ist!

der Marcel

EDIT: schon wieder 😁

19.04.2006 - 16:40 Uhr

Hallo!

@Maddinel: Nein, das íst nicht so. List<T> ist eine generische Listenimplementierung. Der Vorteil der Generics (neu in .Net2.0) ist gerade der, das casten in object zu vermeiden.

@sebo: Habe es noch nicht ausprobiert, aber wenn es geht, dann so:

List<List<Channel>> test = new List<List<Channel>>();

der Marcel

EDIT: zu spät 🙂

19.04.2006 - 01:51 Uhr

Hallo!

Ich schreibe zur Zeit an einem Windows-Dienst und habe mir gedacht, per Remoting kommende Exceptions in einer Konsolenanwendung ausgeben zu lassen. Die Kommunikation läuft über IPC. Es wird dabei remote eine Methode der Konsolenanwendung aufgerufen, welcher das Exception-Objekt übergeben wird. Der Windows-Dienst ist dabei der Client und die Konsolenanwendung der Server.
Wenn der Client-Code in einer normalen Anwendung steht, funktioniert er super. Das selbe bringt aber als Windows-Dienst eine RemotingException mit dem Hinweis zutage, dass der Zugriff aud den IPC-Port verweigert wurde.
Es dürfte an Sicherheitseinstellungen liegen, aber ich finde keinen Ansatz an dieser Stelle weiterzukommen. Kann sich das jemand von euch erklären?

Zur Ergänzung den betreffenden Code:

ChannelServices.RegisterChannel(new IpcChannel(), true);
RemotingConfiguration.RegisterWellKnownClientType(typeof(RemoteObject), "ipc://exConsole/exRemote");//Registrierung als Remote-Typ
RemoteObject remote = new RemoteObject();
remote.ShowException(new Exception("Test"));// an dieser Stelle kommt die Exception, wenn dies ein Windows dienst ist, sonst nicht

Bin euch für jede Hilfe dankbar!

Der Marcel

18.04.2006 - 18:08 Uhr

Hi!

Du meinst sicherlich globale Variablen. Nein, die gibt es in C# nicht. Mit dem Singleton-Pattern kannst du so eine Funktion aber realisieren.

der Marcel

18.04.2006 - 18:06 Uhr

Hi!

Wenn du Argumente weitergeben möchtest, ist Remoting eine gute Variante: Dateiassoziation

Willst du dein Programm in den Vordergrund bringen, dann steht hier auch etwas interessantes: Programm on Top

der Marcel

18.04.2006 - 18:04 Uhr

Hi LaTino!

Original von LaTino
Nicht ganz. Zwangsvorschau nur, wenn ein Beitrag erschienen ist. Also in ca. 2% aller Fälle, eher weniger.

Das erlebe ich schon etwas häufiger. So in etwa 30% der Fälle würde ich das schon schätzen. Daher bin ich dann auch auf die Idee dazu gekommen.
Irgendwelche Extra-Klicks würde ich da auch nicht bevorzugen, weil es nervtötend ist, wenn man nur eine kurze Antwort schreiben möchte. Daher würde ich die Variante bevorzugen, wie sie Rainbird angesprochen hat. Ein kleiner dezenter Hinweis beim Aufrufen der Antwort-Seite, keine Popups u.ä.. Vielleicht nur ein kleines Symbol, so dass die Information, dass man nicht der einzigste ist, vermittelt wird.

der Marcel

18.04.2006 - 13:04 Uhr

Hi xero!

Du könntest auch eine Zeile sparen, wenn du schreibst:

textBoxListe.Add(new TextBox());
Form.Controls.Add(textBoxListe[textBoxListe.Count-1]);

der Marcel

18.04.2006 - 12:31 Uhr

Hallo Yellow!

Ließe sich denn im Antwort-erstellen-Fenster schon ein Hinweis geben, dass andere dies auch gerade tun?

der Marcel

18.04.2006 - 12:23 Uhr

Hi!

Benutze doch bitte C#-CodeTags. Dann könnte man als Leser auch was erkennen 🙂

der Marcel

18.04.2006 - 12:17 Uhr

Hallo zusammen!

Um herbivores Fingerzeig auf IpcChannel in .Net2.0 zu komplettieren, habe ich sein Remoting-Beispiel von TCP auf IPC umgerüstet.
Ein Problem der Kommunikation zwischen Server/Client über TCP ist, dass es dabei desöfteren zu Komplikationen mit Virenscannern und Firewalls kommen kann. Der selbe Fehler, welcher im Beitrag AccessViolationException bei Remoting mit Windows-.Net-Dienst/Konsolenanwendung aufgetaucht ist, zeigte sich auch bei herbivores ursprünglichem .Net1.1-Beispiel. Man musste das Programm nur dreimal hintereinander starten, um im Zusammenspiel mit dem Internet-Wächer des Virenscanners eine AccessViolationException zu erreichen. Als adäquate Alternative zum Abschalten des Virenscanners bietet sich in .Net2.0 daher IpcChannel an, da es nicht über das Netzwerk arbeitet, sondern das prozessübergreifende Kommunikatonssystem von Windows verwendet.

Nun das Beispiel für .Net2.0:

using System;
using System.Windows.Forms;
using System.Drawing;

using System.Threading;

using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Ipc;

//*****************************************************************************
public class MyWindow : Form
{
    //--------------------------------------------------------------------------
    private TextBox tbx;

    //==========================================================================
    public MyWindow()
    {
        Control ctrlCurr;
        
        //-----------------------------------------------------------------------
        Text = "Test";
        ClientSize = new Size(220, 70);

        //-----------------------------------------------------------------------
        ctrlCurr = tbx = new TextBox();
        ctrlCurr.Location = new Point(10, 10);
        ctrlCurr.Size = new Size(200, 50);
        Controls.Add(ctrlCurr);
        CreateHandle();
    }

    //==========================================================================
    public void SetNewArgs(String[] astrArg)
    {
        //-----------------------------------------------------------------------
        // Argumente zu einem langen String zusammenfügen
        //-----------------------------------------------------------------------
        String strAllArgs = "";
        foreach (String strArg in astrArg)
        {
            strAllArgs += strArg + " ";
        }
        strAllArgs = strAllArgs.Trim();

        BeginInvoke((MethodInvoker)delegate() { tbx.Text = strAllArgs; });
    }

}

//*****************************************************************************
// Objekte dieser Klasse können von Ferne benutzt werden
//*****************************************************************************
public class ArgsReceiver : MarshalByRefObject
{

    //==========================================================================
    // Diese wird in der ersten Instanz ausgeführt, aber von der weiteren
    // Instanz aufgerufen. Die übergebenen Werte an das Hauptfenster
    // weitergegeben.
    //==========================================================================
    public void SetNewArgs(String[] astrArg)
    {
        App.MainForm.SetNewArgs(astrArg);
    }
}

//*****************************************************************************
abstract class App
{
    //--------------------------------------------------------------------------
    private static Mutex pobjMutex = null;
    private static MyWindow frmMain = null;

    //==========================================================================
    public static MyWindow MainForm
    {
        get
        {
            return frmMain;
        }
    }

    //==========================================================================
    public static int Main(string[] astrArg)
    {
        //-----------------------------------------------------------------------
        // Kommunikationsparameter
        //-----------------------------------------------------------------------
        String strUniqueName = "215f73e4-c820-4b3c-8f90-3f7e6616ee59"; // unbedingt durch eine eigene GUID ersetzen
        String strUniquePortName = "sdfsdfsdfs";
        String strURLClient = "ipc://" + strUniquePortName + "/" + strUniqueName;
        String strURLService = strUniqueName;

        //-----------------------------------------------------------------------
        // Feststellen, ob wir erste oder weitere Instanz sind
        //-----------------------------------------------------------------------
        bool pobjIOwnMutex = false;
        pobjMutex = new Mutex(true, strUniqueName, out pobjIOwnMutex);
        if (pobjIOwnMutex)
        {
            //-----------------------------------------------------------------------
            // Als erste Instanz erzeugen wir den Server/Service-Part
            //-----------------------------------------------------------------------
            ChannelServices.RegisterChannel(new IpcChannel(strUniquePortName), false);
            RemotingConfiguration.ApplicationName = strUniqueName;
            RemotingConfiguration.RegisterWellKnownServiceType(
               typeof(ArgsReceiver),
               strURLService,
               WellKnownObjectMode.SingleCall
            );

            //-----------------------------------------------------------------------
            // Erzeugen und öffnen des Hauptfensters
            //-----------------------------------------------------------------------
            frmMain = new MyWindow();
            frmMain.SetNewArgs(astrArg);
            Application.Run(frmMain);

        }
        else
        {
            //-----------------------------------------------------------------------
            // Als weitere Instanz erzeugen wir den Client-Part
            //-----------------------------------------------------------------------
            RemotingConfiguration.RegisterWellKnownClientType(
               typeof(ArgsReceiver),
               strURLClient
            );

            //-----------------------------------------------------------------------
            // Und senden die Argumente an den Server/Service-Part
            //-----------------------------------------------------------------------
            ArgsReceiver argrecv = new ArgsReceiver();
            argrecv.SetNewArgs(astrArg);
        }

        return 0;
    }
}

[EDIT=herbivore]Die GUID 215f73e4-c820-4b3c-8f90-3f7e6616ee59 ist nur ein Beispiel und muss bei der Übernahme des Codes unbedingt durch eine eigene GUID ersetzt werden.[/EDIT]

@svenson: Es ist gut möglich, das IPC NamedPipes implementiert. Meinst du das damit?

Viel Erfolg damit!
der Marcel

EDIT: Neuen Code eingefügt. herbivore hat daran noch einige Optimierungen aus der ursprünglichen Version vorgenommen.

18.04.2006 - 10:43 Uhr

Hi!

Mit meinem Vorschlag meinte ich nur einen Hinweis darauf. Keine erzwungene Vorschau-Seite, mit der man die Bedienung umständlicher macht. Was selbstverständlich ein Problem wäre, ist, wenn der User auf Antworten geht und dann myCsharp verlässt. So hätte man während eines Timeouts dennoch den Hinweis, obwohl eigentlich doch niemand mehr antwortet.

der Marcel

18.04.2006 - 09:41 Uhr

Hallo!

Unter net2.0 kannst du eine MaskedTextBox verwenden. Die könnte dein Problem lösen.

der Marcel

EDIT: Sorry, mein Vorschlag passt ncht. Du möchtest ja auch einen bestimmten Wertebereich eingrenzen.

18.04.2006 - 00:28 Uhr

Hi!

Dann hättest du hinterher eine 3. Form.

der Marcel

18.04.2006 - 00:25 Uhr

hi!

Original von harleyhm
wieso kommt du drauf das ich in form 1 zeichne ?

weil der Code unmöglich in Form2 stehen kann 😉

der Marcel

18.04.2006 - 00:23 Uhr

Hi harleyhm!

So wie ich den Code interpretieren kann, steht dieser nicht in der 2. Form, sondern in der auf den Click auf ein MenuItem aufgerufenen Methode, welche die 2. Form aufrufen soll. Demzufolge müsstest du auf Form 1 zeichnen.

Besser könntest du auch gleich schreiben:

Form_Gezogene_Monitor anzeigen_Gezogene_Monitor = new Form_Gezogene_Monitor();

Ich würde dir auch dazu raten, erst noch etwas die Grundlagen zu C# und objektorientierter Programmierung durchzuarbeiten (in einem Buch, mindestens jedoch den guide to C#)

Viel Erfolg! 😉
der Marcel

EDIT: zu spät

17.04.2006 - 23:58 Uhr

Hi!

Mit IPC macht auch der Virenscanner keine Schwierigkeiten mehr, ist also besser 😉

der Marcel

17.04.2006 - 23:28 Uhr

Nabend!

Die befindet sich in der Program.cs.

der Marcel