Hi Robert G!
Da war ich tatsächlich etwas unaufmerksam 🤔
der Marcel
Hi!
Da musst du eine neue Klasse schreiben, welche von DateTime erbt 😉
der Marcel
Hi sorny!
der Marcel
EDIT: Mist, hab mich zu lange mit der Suche der deutschen Seite aufgehalten 🙂
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
Hi!
Soweit ich weiß, ist die einfache Version von Obfuscator in der VS 2005 Professional-Version enthalten. Im Standard glaube nicht.
der Marcel
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
Hi!
Das habe ich dir vorhin beschrieben.
der Marcel
Hi!
Habe mich schon sehr an den "Affengriff" gewöhnt. 😁 Je nach Konfiguration und Windows-Version hat man sofort den TaskManager 😉
der Marcel
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
Hi!
So geht es natürlich auch 🙂 ist eine Frage dessen, wie man es bevorzugt 😉
der Marcel
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
Hi hitzi!
Nein, kann man nicht. Die Methoden werden lediglich mit Hilfe von Delegaten bei Events registriert.
der Marcel
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
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
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... 😉
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 🙂
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
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
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
hi!
Mache vorher den Test wie ihn frisch vorgeschlagen hat, bevor du etwas veränderst.
der Marcel
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
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
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?
Hallo Cali271!
Deine 1.Form kann eine Methode auf das FormClosed-Event der 2. Form registrieren!
der Marcel
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
Hi!
Meine Firewall sortiert auch die einzelnen Applikationen, welche zugreifen wollen. 😉
der Marcel
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
8)Hi Cyron!
welcome @mycsharp.de 8) 👍
der Marcel
Hallo Dexter!
Bei meiner Firewall schaffen die es nicht. Das muss ich explizit freigeben.
der Marcel
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
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
Hi sebo!
Ist denn Channel eine Klasse von dir oder aus einer Framework-Bibliothek.
Namespaceeinbinden geht über Projektverweis und using-Direktive.
der Marcel
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
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 😁
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 🙂
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
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
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
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
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
Hallo Yellow!
Ließe sich denn im Antwort-erstellen-Fenster schon ein Hinweis geben, dass andere dies auch gerade tun?
der Marcel
Hi!
Benutze doch bitte C#-CodeTags. Dann könnte man als Leser auch was erkennen 🙂
der Marcel
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.
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
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.
Hi!
Dann hättest du hinterher eine 3. Form.
der Marcel
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
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
Hi!
Mit IPC macht auch der Virenscanner keine Schwierigkeiten mehr, ist also besser 😉
der Marcel
Nabend!
Die befindet sich in der Program.cs.
der Marcel