Laden...

Forenbeiträge von CrocodileDundee Ingesamt 51 Beiträge

22.12.2020 - 15:10 Uhr

Hallo Abt,
danke für deine schnell Reaktion. Ich hab's aber noch nicht ganz kapiert, deshalb formulier ich es nochmal anders:

Wenn ich eine Klasse über ein Interface verwenden will, so muss ich doch in dieser Klasse das Interface bekannt machen, also


    public class Class : Interface
    {
          ...
    }

Mein Problem ist aber, dass dieses Interface komplett woanders liegt, weil die Klasse als dll zur Verfügung gestellt werden soll, d.h. die Klasse weis nix von dem Interface.

Wie kann ich denn meiner Klasse dem Interface bekanntmachen?

Gruß
Frank

22.12.2020 - 13:58 Uhr

Hallo zusammen,
ich möchte meine Anwendung mit Interfaces entkoppeln und bin dabei auf ein Problem gestoßen.

Ich habe in C# eine Klasse geschrieben, die ich als dll meinen verschiedenen Anwendungen bereitstelle.

Das Problem ist nun, daß diese Klasse doch von dem Interface erben müßte, über welches ich
zugreifen möchte.

Dieses Interface ist aber natürlich der Klasse aber nicht bekannt, weil komplett extern.

Also folgendes ist halt momentan nicht möglich:



    public class dllClass : IExternesInterface
    {
          ...
    }


Gibt es eine Möglichkeit, daß ich die Klasse trotzdem als externe dll in mein Projekt einbinde und über ein Interface darauf zugreifen kann?
Oder mach ich da einen generellen Denkfehler?

Danke und Gruß
Frank

08.10.2020 - 11:16 Uhr

Hallo zusammen,
ich parse eine XML-Datei mit XMLReader.

Dabei möchte ich zwischen den Exceptions

  • "Unerwartetes Dateieende" und
  • "Fehlendes Start-Element" (d.h. ein Knoten wurde geschlossen, der vorher nicht geöffnet wurde)
    unterscheiden können.

Die Property "Message" möchte ich dazu nicht verwenden, da deren Formulierung sich eventuell ändern könnte und das Programm auch auf verschieden-sprachigen Systemen laufen soll.

Auch die Property "HRESULT" bietet mir keine Unterscheidungsmöglichkeit, da der zurückgegebene Errorcode immer gleich ist (0x80131940).

Und außerdem werden beide Exceptions mit der Klasse "XmlException" abgefangen.

Alle übrigen Properties der Exception-Klassen scheinen auch keine Unterscheidungsmöglichkeit zu bieten.

Bin daher momentan ziemlich ratlos und hoffe auf einen Tipp von euch.

Vielen Dank und viele Grüße
Frank

01.10.2020 - 20:54 Uhr

Hallo zusammen,
in meinem Projekt möchte ich teilweise sehr viele kleine (ca. 1000 x 500kB) oder auch wenige große Dateien (ca. 1-2 x 2GB) von einem USB-Stick, der als Netzlaufwerk konfiguriert ist, auf die Festplatte des PCs kopieren.

Die Performance des File.Copy-Befehls scheint mir dabei etwas gering zu sein.
Deshalb habe ich auch schon nach anderen Klassen Ausschau gehalten.

  • File.Copy
  • StreamReader/Writer
  • FileStream

Welche davon ist denn (zumindest tendenziell) die schnellste Methode?
Oder gibt es noch andere, die vielleicht noch schneller sind.

Danke und Gruß
Frank

28.09.2020 - 13:52 Uhr

Hallo zusammen,
ich greife in meiner Windows-Forms-App auf ein Netzlaufwerk zu.
Manchmal kommt es vor, daß obwohl es verfügbar ist, ich über die App nicht darauf zugreifen kann und es auch im Windows-Explorer als "nicht bereit" angezeigt wird (Icon mit rotem Kreuz).

Wenn dies der Fall ist, kann ich dies einfach mit einem Klick im Explorer auf das Netzlaufwerksymbol beheben, sofort wird es als "bereit" angezeigt und ich kann auch über die App darauf zugreifen.

Deshalb meine Frage:
Wie kann ich denn dieses "Draufklicken" im Windows-Symbol in der App realisieren, d.h. mit welchem Befehl kann ich denn die Verfügbarkeit eines Netzlaufwerks prüfen?

Vielen Dank und viele Grüße
Frank

10.05.2020 - 19:28 Uhr

Hallo zusammen,
habe jetzt versucht über Vererbung das Problem zu lösen, d.h. ich habe eine Klasse "MyFileSystemWatcher" erstellt, die von FileSystemWatcher abgeleitet ist und iNotifyPropertyChanged
beinhaltet.

Nun steh ich aber vor dem Problem, dass ich natürlich auf den Setter der Property, auf die ich die PropertyChange-Änderung anwenden möchte (in meinem Fall "EnableRaisingEvents") nicht zugreifen kann, um dort die OnPropertyChanged-Methode einzufügen.

Gibt es einen Weg das trotzdem zu realisieren?

Danke und Gruß
Frank

08.05.2020 - 12:48 Uhr

Könnte ich dann vielleicht per Vererbung einen neues UserControl
(z.B. "MyFileSystemWatcher") erstellen
und die INotifyPropertyChanged dort für die gewünschte Property implementieren?

Gruß Frank

08.05.2020 - 12:25 Uhr

Hallo zusammen,
versuche schon seit längerer Zeit, die Property "EnableRaisingEvents" des
FileSystemWatchers an eine TextBox zu binden, so dass diese mir anzeigt,
ob der FileSystemwatcher ein- oder ausgeschaltet ist.

Mein ursprünglicher Versuch war:

(fsw_WatcherProjectFolder = FileSystemWatcher,
textBox1 = TextBox)



this.textBox1.DataBindings.Add(new Binding("Text", fsw_WatcherProjectFolder, "EnableRaisingEvents", true, DataSourceUpdateMode.OnPropertyChanged));


Die Bindung funktioniert leider nur 1x (beim Starten der App), bei der Änderung von "EnableRaisingEvents" wird aber die TextBox nicht mehr aktualisiert.

Danke und Gruß
Frank

19.11.2019 - 15:16 Uhr

Hallo zusammen,
ich glaube, ich habe noch nicht ganz verstanden, wann ich
bei unterschiedlichen Parameter einer Methode

  • die Methode überlade

public void DoSomething(long x) {}
public void DoSomething(long x, long y) {}

  • oder optionale Parameter

public void DoSomething(long x, long y = 0) {}

verwende.

Bei beiden Techniken muss ich die beiden Fälle abdecken, daß y verwendet wird oder nicht. Tatsächlich fällt es mir momentan schwer, mich für eine der beiden Techniken zu entscheiden.

Ein keiner Tipp wäre ganz hilfreich.

Vielen Dank und viele Grüße
Frank

24.10.2019 - 07:51 Uhr

Hallo zusammen,
ich suche den Download zu dem Tutorial "TCP/IP Socket-Programmierung in C#". Der Download-Link

http://www.codeplanet.eu/forum/filedata/fetch?id=1618

scheint nicht mehr zu funktionieren.
Weiß jemand vielleicht, ob die Datei irgendwo sonst zur Verfügung steht?

Danke und Gruß
Frank

23.10.2019 - 08:40 Uhr

Hallo zusammen,
ich habe einen kleinen TCP-Server und einen -Client erstellt.

Der nachfolgende Quellcode zeigt den Client, dessen Form aus den folgenden
Steuerelementen besteht:

  • cmb_IPAddress - Combobox für die IP-Adressen
  • txt_Port - Textbox für den Port
  • txt_SendText - Textbox für den zu sendenden Text
  • btn_Connect - Button zum Verbinden und Senden

using System;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;


namespace TCPClientTest
{

    // ---------------------------------------------------------------------------------
    // Form
    // ---------------------------------------------------------------------------------

    public partial class MainWindow : Form
    {

        // --------------------------------------------------------------------------------
        // Declarations
        // --------------------------------------------------------------------------------

        // IP Address and Port
        private IPAddress ipAddress;
        private int port;

        // TCP Client
        private TcpClient tcpClient;
        private NetworkStream stream;


        // --------------------------------------------------------------------------------
        // Declarations
        // --------------------------------------------------------------------------------
        // Form
        // --------------------------------------------------------------------------------

        // Form: Constructor
        public MainWindow()
        {
            InitializeComponent();
        }

        // Form: Load
        private void MainWindow_Load(object sender, EventArgs e)
        {
            // Fill ComboBox of IP Address
            cmb_IPAddress.Items.Add("Loopback");
            IPHostEntry hostInfo = Dns.GetHostByName(Dns.GetHostName());            
            for(int i = 0; i < hostInfo.AddressList.Length; i++)
            {
                cmb_IPAddress.Items.Add(hostInfo.AddressList[i].ToString());
            }
            cmb_IPAddress.SelectedIndex = 0;

        }

        // Form: Closed
        private void MainWindow_FormClosed(object sender, FormClosedEventArgs e)
        {
            stream.Close();
            tcpClient.Close();
        }


        // --------------------------------------------------------------------------------
        // Controls
        // --------------------------------------------------------------------------------

        // Button: Connect
        private void btn_Connect_Click(object sender, EventArgs e)
        {
            // Detect IP Address and Port
            if (cmb_IPAddress.Text == "Loopback")
            {
                ipAddress = IPAddress.Loopback;
            }
            else
            {
                ipAddress = IPAddress.Parse(cmb_IPAddress.Text);
            }
            port = Convert.ToInt32(txt_Port.Text);


            // Send data
            tcpClient = new TcpClient();
            tcpClient.Connect(ipAddress, port);

            stream = tcpClient.GetStream();

            byte[] msgBytArr = Encoding.ASCII.GetBytes(txt_SendText.Text);
            stream.Write(msgBytArr, 0, msgBytArr.Length);
        }


    }
}

Soweit funktioniert auch alles, der TCP-Server empfängt die Daten und zeigt diese auch korrekt an.

Mein Problem ist, daß ich mit einem zusätzlichen Button die Funktionen zum Verbinden des TCP-Client und dem Senden der Daten trennen möchte, um nicht bei jedem Sendevorgang einen neuen TCP-Client erzeugen zu müßen.
Dazu habe ich einen zusätzlichen "Send"-Button eingefügt, und Code-Teile des Buttons "Connect" dorthin ausgelagert.
Der "Controls"-Bereich des neuen Quellcodes sieht somit folgendermaßen aus:



        // --------------------------------------------------------------------------------
        // Controls
        // --------------------------------------------------------------------------------

        // Button: Connect
        private void btn_Connect_Click(object sender, EventArgs e)
        {
            // Detect IP Address and Port
            if (cmb_IPAddress.Text == "Loopback")
            {
                ipAddress = IPAddress.Loopback;
            }
            else
            {
                ipAddress = IPAddress.Parse(cmb_IPAddress.Text);
            }
            port = Convert.ToInt32(txt_Port.Text);


            // Send data
            tcpClient = new TcpClient();
            tcpClient.Connect(ipAddress, port);

            stream = tcpClient.GetStream();
        }

        // Button: Send
        private void btn_Send_Click(object sender, EventArgs e)
        {
            byte[] msgBytArr = Encoding.ASCII.GetBytes(txt_SendText.Text);
            stream.Write(msgBytArr, 0, msgBytArr.Length);
        }

    }
}

Bei Ausführen bekomme ich allerdings den folgenden Effekt:

  • Der TCP-Client läßt sich mit dem Server verbinden.

  • Beim 1. Klick auf den "Send"-Button wird der Text korrekt vom Server empfangen.

  • Beim 2. Klick auf den "Send"-Button zeigt der TCP-Server keine Rekation mehr.

  • Beim 3. Klick auf den "Send"-Button wird der folgende Fehler ausgelöst:
    "In die Übertragungsverbindung können keine Daten geschrieben werden: Eine bestehende Verbindung wurde softwaregesteuert
    durch den Hostcomputer abgebrochen."

Kann mir jemand eine Tipp geben, wo der Fehler zu suchen ist?

Vielen Dank und viel Grüße
Frank

08.10.2019 - 09:40 Uhr

Hallo zusammen,
ich möchte einer Methode einen Klassennamen als Parameter übergeben.
Also praktisch folgendermaßen:


public class Auto()
{
     ...
}

public class Person()
{
     ...
}


public class TuWasMitDerKlasse(Klasse) 
{
     ...
}

Die Klasse "TuWasMitDerKlasse" bekommt in diesem Fall also entweder "Auto" oder "Person" als Parameter übergeben.

Habs schon versucht mit


public class TuWasMitDerKlasse(typeof(Klasse)) 
{
     ...
}

oder mit


public class TuWasMitDerKlasse(class Klasse) 
{
     ...
}

Geht beides nicht. Kann mir jemand vielleicht eine Tipp geben?

Danke und Gruß
Frank

03.09.2019 - 09:26 Uhr

Hallo, nochmal danke für die Hilfe, läuft jetzt 👍

Eine Frage hab ich aber noch:
Ich würde gerne in einer Textbox anzeigen lassen, was der http-Treiber letztendlich gesendet hat, so wie ich das auch bei Postman mir anzeigen lassen kann, z.B:

GET /api/v4/contacts?me=true HTTP/1.1
Host: www.wrike.com
Authorization: Bearer XXXYYYZZZ
User-Agent: PostmanRuntime/7.16.3
Accept: /
--- etc. ---
--- etc. ---

Hab gesehen, daß es die Methode "GetRequestStream" gibt, aber die scheint wohl nicht die richtige zu sein. Gibt es da eine (einfache) Möglichkeit?

Danke und Gruß
Frank

02.09.2019 - 09:00 Uhr

Hallo T-Virus,
nochmal vielen Dank für deine Bemühungen!

Das Programm funktioniert jetzt, wobei ich noch die folgende Zeile bzgl. des Security Protocols einfügen musste:


ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

Kannst du mir jemand vielleicht ein Tipp bzgl. Literatur über C# in Verbindung mit http geben?

Vielen Dank!

01.09.2019 - 16:57 Uhr

Habe jetzt den Accept-Header entsprechend gesetzt, leider
bekomme ich immer noch die Fehlermeldung.

  
        // Request data from URI  
        public string makeRequest()  
        {  
            // Declarations  
            string strResponseValue = string.Empty;  
            string endpoint = $"https:/www.wrike.com/api/v4/contacts?me=true";  
  
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endPoint);  
  
            request.Method = "GET";  
  
            request.Accept = $"*/*";       */ // Accept eingefügt  
  
            request.Headers.Add("Authorization", "Bearer XXXYYYZZZ");   
  
            HttpWebResponse response = null;  
  
            try  
            {  
                response = (HttpWebResponse)request.GetResponse();  
  
 		// ---------------------------------------------------  
  	// An dieser Stelle wird die Ausnahme geworfen  
 		// ---------------------------------------------------  
                using (Stream responseStream = response.GetResponseStream())  
                {  
                    if (responseStream != null)  
                    {  
                        using (StreamReader reader = new StreamReader(responseStream))  
                        {  
                            strResponseValue = reader.ReadToEnd();  
                        }  
                    }  
                }  
            }  
            catch(Exception ex)  
            {  
                strResponseValue = "{\"errorMessages\":[\"" + ex.Message.ToString() + "\"],\"errors\":{}}";   
            }  
            finally  
            {  
                if(response != null)  
                {  
                    ((IDisposable)response).Dispose();  
                }  
            }  
            return strResponseValue;  
        }  
  
31.08.2019 - 20:46 Uhr

Hallo zusammen,
ich versuche gerade auf die Wrike-API mit einem kleinen C#-Terminal zuzugreifen. Dafür habe ich eine App registriert und einen Permanent-Token generiert.

Mit Hilfe von des Tools Postman gelingt mir nun auch der entsprechende Datenzugriff, dessen Befehl folgendermaßen aussieht:

GET /api/v4/contacts?me=true HTTP/1.1 Host: [www.wrike.com]() Authorization: Bearer XXXYYYZZZ User-Agent: PostmanRuntime/7.16.3 Accept: */* Cache-Control: no-cache Postman-Token: ABCDEFGHIJKLM Host: [www.wrike.com]() Accept-Encoding: gzip, deflate Cookie: is_eu_visitor=1; wrikeLocale=en; wordpress_google_apps_login=bfac67bca374d2758bfe58e9d1429192; lgd=0; BCSI-CS-cc3d248abb9328f5=1 Connection: keep-alive cache-control: no-cache Dabei ist XXXYYYZZ der Permanent-Token, der real ca. 150 Zeichen lang ist. Nun versuche ich diesen Befehl mittels http-Request in meinem C#-Terminal aus abzusetzen, wobei die die folgende gezeige Methode "makeRequest" meiner entsprechenden Kasse aufrufe. Die Stelle an der dann die Ausnahme geworfen wird, habe ich unten im Code gekennzeichnet. Die entsprechende Fehlermessage ist dann:> _Fehlermeldung:_ > "Die zugrunde liegende Verbindung wurde geschlossen: Unerwarteter Fehler beim Senden."

        // Request data from URI
        public string makeRequest()
        {
            // Declarations
            string strResponseValue = string.Empty;
            string endpoint = $"https:/www.wrike.com/api/v4/contacts?me=true";

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endPoint);

            request.Method = "GET";

            request.Headers.Add("Authorization", "Bearer XXXYYYZZZ"); 

            HttpWebResponse response = null;

            try
            {
                response = (HttpWebResponse)request.GetResponse();

 		// ---------------------------------------------------
		// An dieser Stelle wird die Ausnahme geworfen
 		// ---------------------------------------------------
                using (Stream responseStream = response.GetResponseStream())
                {
                    if (responseStream != null)
                    {
                        using (StreamReader reader = new StreamReader(responseStream))
                        {
                            strResponseValue = reader.ReadToEnd();
                        }
                    }
                }
            }
            catch(Exception ex)
            {
                strResponseValue = "{\"errorMessages\":[\"" + ex.Message.ToString() + "\"],\"errors\":{}}"; 
            }
            finally
            {
                if(response != null)
                {
                    ((IDisposable)response).Dispose();
                }
            }
            return strResponseValue;
        }

Kann mir jemand vielleicht sagen, warum diese Anfrage nicht funtioniert?

Danke und Gruß
Frank

20.08.2019 - 21:56 Uhr

Hallo zusammen,
har vielleicht jemand schon mal was mit der Wrike API gemacht?
Ich find irgendwie keinen Einstoeg, hab mir schon ein Projekt von GitHub
heruntergeladen, diese hilft mir aber auch nicht richtig weiter.

Vielen Dank und viele Gruesse
Frank

13.08.2019 - 20:07 Uhr

Hallo zusammen,
nehmen wir an, ich möchte eine Software verkaufen und diese mit einem Lizenzkey gegen eine Zweitinstallation schützen.
Dazu könnte ich jetzt anfangen, mir per Cloud oder anderen Serverdiensten eine eigenes Lizenzmanagement aufzubauen.

Allerdings könnte ich mir vorstellen, daß dazu bereits fertige Lösungen angeboten werden, vleleicht sogar als dll, die in ein C#-Projekt eingebunden werden kann und über die dann die Lizenzverwaltung mit Hilfe einer Backendlösung verwaltet werden kann.

Kann mir vielleicht jemand solch einen Anbieter nennen, falls dieser existiert?`

Vielen Dank und Gruß
Frank

12.08.2019 - 14:41 Uhr

Hallo zusammen,
habe unter Raspbian das Mono-Projekt installiert und kann nun eine einfache C#-Hello-World-Anwendung laufen lassen. Soweit alles gut.

Habe dann eine Anwendung getestet, die auf eine selbst geschriebene dll verweist. Hat aber leider nicht funktioniert, selbst wenn ich die dll in das gleiche Verzeichnis kopiert hab wie die exe (in meinem Fall der Raspbian Desktop).

Muß ich die dlls vielleicht in ein anderes Verzeichnis packen oder im Visual Studio schon was anders einstellen ?

Vielen Dank!

08.08.2019 - 08:51 Uhr

Hi,
Deklariert man nun z.B. die DataTable als static, also:

  
static DataTable dt = new DataTable();  
  

Dann wird einem exakt die von dir genannte Exception um die Ohren gehauen.
LG

Du hattest Recht, die DataTable war als static deklariert.

Also sind dann anscheinend statische Properties einer Klasse auch dann noch im Speicher,
selbst wenn kein Objekt der Klasse mehr existiert.

Kann es ein, daß diese Properties dann über die gesamte Lebensdauer des Programms im Speicher gehalten werden?

06.08.2019 - 14:41 Uhr

OK, ich denke ich hab das Problem anscheinend nicht ausführlich genug geschildert.

Im Grund genommen geht es darum, daß ich eine private Property ändern möchte, die nur über den Konstruktor erreichbar ist.
Konkret geht es darum, daß ich ein Objekt ("Klasse1") instanziere, wobei ich den Namen einer COM-Schnittstelle im Konstruktor angeben muss.


Class1 Klasse1 = new Class1(COM1);

War es die falsche Schnittstelle (d.h. keine Kommunikation), war der Plan, das Objekt auf "null" zu setzen, und mit dem Namen einer anderen Schnittstelle neu zu instanzieren.


Klasse1 = null;
Klasse1 = new Class1(COM2);

Beim neuen Instanzieren von Class1 tritt nun die Exception auf.
Der Fehler tritt da auf, wo der Konstruktor der Subklasse durchlaufen wird.


public class Class1(string COMPortName)
{
    public Subclass SubKlasse = new Subclass();
    ...
}


public class Subclass
{
    DataTable dt = new DataTable();

    public Subclass() 
    }
        dt.Columns.Add("Sp1");      // Hier wird die Exception geworfen
        dt.Columns.Add("Sp2");
        dt.Columns.Add("Sp3");
    }
}



Der Compiler meldet zur Laufzeit:
"Additional information: Eine Spalte names 'Sp1' gehört bereits zu dieser DataTable."

Ich kann mir das nur so erklären, daß das Objekt noch im Speicher hängt und noch nicht vom Garbage Collector bereinigt wurde.
Einen "GC-Collect()" hab ich auch schon eingefügt, bringt aber auch nix.

Danke!

06.08.2019 - 11:36 Uhr

Hallo zusammen,
habe eine Klasse, in der ich wiederum eine Klasse instanziere:


public class Class1
{
    public Subclass SubKlasse = new Subclass();
    ....
}

In meiner Main-Routine instanziere ich dann Class1:


Klasse1 = new Class1();

so daß ich dann auch auf die SubKlasse zugreifen kann.


Klasse1.SubKlasse.Prop = 0;

Soweit alles gut.

Wenn ich nun aber die Klasse1 zerstöre und später wieder
instanziere


Klasse1 = null;
...
Klasse1 = new Class1();

bekomme ich eine Exception, weil anscheinend die Instanz der Subklasse noch immer im Speicher ist.
Kann das sein? Wird die Subklasse nicht mit zerstört?

Vielen Dank!

13.06.2019 - 08:08 Uhr

Hallo zusammen,
warum kann ich eigentlich bei der einer der Überladungen der UDP-Send-Methode den IPEndPoint mit angeben?

Diesen habe ich doch schon bei der Connect-Methode festgelegt.

Danke und Gruß
Frank

23.04.2019 - 14:40 Uhr

Hallo zusammen,
möchte jetzt endlich ernsthaft den Umstieg von Forms auf WPF wagen
und dabei mir gleich einen sauberen Aufbau der Anwendung angewöhnen.

Grundsätzlich besteht eine neue WPF-Anwendung aus den Dateien

  • App.xaml
  • App.xaml.cs
  • MainWindow.xaml
  • MainWindow.xaml.cs

OK, grundsätzlich "falsch" wäre es ja nicht, in jede dieser Dateien Code zu schreiben, aber gibt es Dateien, die "man" eher nicht zum coden verwendet
um z.B. eine saubere Trennung zwischen Code und GUI zu erreichen?

Besser gesagt, ich suche nach "Best Practices", wie man ein sauberes Design einer WPF erstellt.

Vielen Dank und viele Grüße
Frank

03.04.2019 - 09:19 Uhr

Hallo zusammen,
suche nach einer Möglichkeit, mit einem C# Tool Word-Dokumente in pdf-Dokumente zu konvertieren.
Dazu werden im Netz die verschiedensten Tools und Lösungswege angeboten.

Wie löst ihr das? Gibt es eine Möglichkeit, die ihr empfehlen könnt?

Vielen Dank und viele Grüße
Frank

08.03.2019 - 13:53 Uhr

Wenn sich die Eigenschaften in allen Instanzen gleichermaßen, dann sind also
in allen Instanzen die Eigenschaften immer gleich?
Aber was ist dann der Unterschied zu einer statischen Klasse?

08.03.2019 - 11:36 Uhr

Hallo zusammen,
sorry, vielleicht nochmal etwas ausführlicher:


namespace Tierheim
{

    // Klasse Hund
    public class Hund
    {
        public string Rasse;
    }


    // Klasse Hundekatalog
    public class Hundekatalog
    {
        private static Hund Waldi = new Hund();
    }

}

Was verursacht hier die Instanzierung mit "static" ?

Gruß
Frank

08.03.2019 - 11:21 Uhr

Hallo zusammen,
ich bin in einem Quellcode auf die folgende Instanzierung gestoßen
(die Bezeichner habe ich geändert):


private static Auto Kadett = new Auto();

Dabei ist Auto keine statische Klasse.

Was macht bei dieser Instanzierung das Wort "static" für einen Sinn?

Dank und Gruß
Frank

15.02.2019 - 13:56 Uhr

Hallo zusammen,
ich möchte eine ComboBox mit einer Auswahl für die Baudrate einer Schnittstelle befüllen.
Diese Auswahl besteht also nur aus Zahlenwerten (9600, 19200, 38400).

Ich würde gerne ein enum erstellen, aber der Compiler erwartet Bezeichner, d.h. also so etwas wie


private enum Baudrate 
{
      9600,
      19200,
      38400
}

geht nicht.
Wie kann ich sowas am besten lösen, wenn ich als Auswahl nur Zahlenwerte habe?

Danke und Gruß
Frank

31.01.2019 - 15:44 Uhr

Gelöst!
Allerdings: Das ganze Problem war, daß ich die ganze Zeit anstatt

DialogResult = DialogResult.OK
(was ja dann eigentlich this.DialogResult = DialogResult.OK entspricht)

die Zeile

   btn_OK.DialogResult = DialogResult.OK

programmiert hatte.
Hab immer gedacht, der Button gibt den "OK" zurück.
Anscheindend muß aber die Form "OK" zurückgeben.

30.01.2019 - 08:44 Uhr

Hallo zusammen,
habe ein Problem mit einem Dialog-Fenster:

In diesem habe ich

  • OK Button (DialogResult = OK)
  • Cancel-Buttton (DialogResult = Cancel)
  • ein DataGridView, in das der User Intergers eingeben soll, dabei sollen die Werte in Spalte 1 größer sein als die in Spalte 2.

Die Eingabe von Buchstaben fange ich mit einer CellValidation ab, die direkt bei der Eingabe "zuschlägt", was auch alles funktioniert.

Die Prüfung der Zahl möchte ich erst auslösen, wenn der User den OK-Button anklickt. Das Fenster soll erst schliessen, wenn die o.g. Bedingung erfüllt ist.
Leider habe ich für dieses Problem noch keine saubere Lösung gefunden.

Zum Beispiel wollte ich den DialogResult des OK-Buttons erst auf "OK" ändern, wenn die Bedingung erfüllt ist, dies bewirkt aber, daß ich den Button 2x anklicken muß, um das Fenster zu schließen.

Hat jemand eine Tipp für mich?

Vielen Dank und viele Grüße
Frank

15.01.2019 - 07:34 Uhr

Hi MrSparkle,
ja richtig, so funktionierts jetzt:

Process.Start("notepad++.exe", "\"" + Dateipfad + "\"");

anstatt

Process.Start("notepad++.exe", Dateipfad);

Gruß
Frank

14.01.2019 - 19:52 Uhr

Hallo zusammen,
in einem DataGridView habe ich zwei Spalten:

  • Spalte 1: Pfadangabe von Textdateien
  • Spalte 2: Button-Column, der die den Pfad von Spalte 1 mit einem Texteditor öffnet.

Klappt alles soweit bis auf eine Ausnahme:
Ist in der Spalte 1 ein Leerzeichen innerhalb des Pfades, wird nur der String bis zum Leerzeichen an den Button übergeben, der folglich diese Datei nicht finden kann, weil ja die Pfadangabe nach dem Leerzeichen abgeschnitten wird.

Wie kann ich denn den kompletten String inklusive der Leerzeichen an den Button übergeben ?

Danke und Gruß
Frank

14.11.2018 - 14:13 Uhr

Hallo zusammen,
habe momentan im Visual Studio 2015 das seltsame Phänomen, dass die Positionierung von Steuerelementen im Designer nicht mit der Positionierung per Code zusammenpasst.

Beispiel:
Ich positioniere mit der Maus einen Button, so dass die Eigenschaft "Left" einen Wert von 50 hat.
Lasse ich nun die App laufen, in der ich diese Left-Position per MessageBox anzeigen lasse, wird ein anderer Wert angezeigt 8o

Habe schon die ganzen Einstellungen durchsucht, aber nicht das passende gefunden. Ist das vielleicht irgendeine Raster-Einstellung?

Danke und Gruß
Frank

13.08.2018 - 15:25 Uhr

Hallo zusammen,
ich möchte in einem StackPanel zwei Buttons vertikal stapeln. Der Platz innerhalb des
Stackpanels soll von beiden Button 50:50 ausgefüllt werden.
Leider funktioniert die Größenangabe für Buttons mit "*" nicht.

Muß ich denn jetzt jedesmal anstatt eines Stackpanels ein Grid definieren, wenn die Elemente gleichmäßig und ohne absolute Größenangaben angeordnet werden sollen?

Hab jetzt viel gesucht, hab aber leider noch keine richtige Bestätigung dafür gefunden.

Danke und Gruß
Frank

10.08.2018 - 10:43 Uhr

8o Der Namespace!!!!! Geht! Danke!

10.08.2018 - 10:22 Uhr

Hallo zusammen,
bin gerade dabei von Forms auf WPF umzusteigen und möchte das gleiche Tool, daß ich bereits in Forms programmiert habe, nun in WPF nachprogrammieren.

Nun habe ich das Problem, daß ich in WPF nicht auf eine statische Klasse zugreifen kann.
In Forms hatte ich die cs-Datei der Klasse einfach in die oberste Ebene des Projektverzeichnisses importiert, und konnte dann von der Code-Datei einer Form direkt darauf zugreifen.

Im WPF-Projekt habe ich nun auch die cs-Datei der Klasse ins Projekt importiert, kann allerdings vom Code aus nicht darauf zugreifen, d.h. die Klasse wird nicht erkannt.
Habe bereits gecheckt, daß in den Eigenschaften der Klasse der Buildvorgang auf "Kompilieren" gesetzt ist.

Was mache ich falsch? Muß ich die Klasse irgendwo noch zusätzlich anmelden?

Danke und Gruß
Frank

09.08.2018 - 07:47 Uhr

Hallo zusammen,
irgendwie verstehe ich bei der Eindingung von dll's noch nicht so ganz den Unterschied zwischen

  • der Verwendung der "using"-Anweisungen im Code
  • und der Verweisliste im Projektmappenexplorer

Mein Problem (Beispiel):

  • In einer Klasse binde ich die dll "System.Globalization" mit "using" ein, diese erscheint aber nicht in der Verweisliste im Projektmappenexplorer.

  • Dafür musste ich aber zuerst die "System.Management" in die Verweisliste aufnehmen, um sie dann mit "using" verwenden zu können.

Danke und Gruß
Frank

08.08.2018 - 11:10 Uhr

Mir geht es hauptsächlich um Konsolen- und Forms-Projekte.

Ich würd' es halt irgendwie "logischer" finden, wenn in der MainClass auch die Main-Methode zu finden ist. Zugegeben, in WPF-Projekten gibt es sowieso keine "Program.cs" mehr.

Ich denke, ich werde es bei "Program" belassen, um auch Verwirrung zu vermeiden, falls das Projekt von einem anderen Teammitglied mal bearbeitet wird.

Gruß
Frank

08.08.2018 - 10:39 Uhr

Ja ok, "Main" gibt Namenskonflikt.
Würde dann die Klasse und Datei in "MainClass.cs" bzw. "MainClass" umbenennen,
in Analogie zu dem "MainWindow", daß es in jedem WPF-Projekt gibt
(geht, habe ich getestet 😄).

Die Frage ist, ob es irgendwelche andere Konsequenzen hat, gerade diese Klasse/Datei umzubenennen bzw. ob etwas dagegen spricht, dies zu tun.

Gruß
Frank

08.08.2018 - 09:20 Uhr

Hallo zusammen,
wollte mal eure Meinung dazu hören, die Datei "Program.cs" und somit auch die statische Klasse "Program" bei Visual-Studio-Projekten generell in "Main.cs" bzw in "Main" umzubenennen,
weil diese Klasse eben die Main-Methode enthält und dort auch keine andere Methode sein "sollte"
(meiner Meinung nach).

Danke und Gruß
Frank

06.08.2018 - 15:10 Uhr

Hallo zusammen,
ich möchte ein kleines Konfigurationstool programmieren, mit dem ich über die Ethernet-Schnittstelle einen Raspberry konfigurieren möchte
(Settings ändern, Status auslesen, etc.)

Würde das gerne als WPF-Anwendung programmieren.
Ich denke eine Browser-basierte Lösung ist da eher ungeeignet, oder?

Gruß
Croc

01.08.2018 - 08:36 Uhr

Hallo zusammen,
kann jemand das Buch

TCP/IP Sockets in C#: Practical Guide for Programmers  
David Makofske / Michael J. Donahoo / Kenneth L. Calvert  
(Englisch) Taschenbuch  – 25. Mai 2004  

empfehlen? Ich meine, es ist ja mittlerweile auch schon 14 Jahre alt.

Allerdings sollten sich die Grundlagen der TCP/IP-Socket wohl kaum verändert haben, oder?

Danke und Gruß
Frank

26.07.2018 - 12:43 Uhr

Hallo zusammen,
irgendwie hab ich noch nicht kapiert, ob ich die .NET SDK auch noch dann noch installieren muss,
wenn ich bereits Visual Studio installiert habe und damit auch bereits Anwendungen entwickle.

Hintergrund: Bin mich gerade am Einarbeiten in ASP.NET, wobei ich gerne einen Raspberry als Webserver für ASP verwenden möchte.

Vielen Dank und Gruß
Frank

25.07.2018 - 13:19 Uhr

Mh? Der SSH Login geht doch einfach über die Putty Anmeldemaske.

Ja schon, aber ich muß mich nach dem Verbinden mit PuTTY ja noch einloggen.

Hab's nochmal anhand der Doku getestet - geht.

Vielen Dank und Gruß
Frank

25.07.2018 - 11:26 Uhr

Hallo zusammen,
ich möchte mich bei meinen Raspberry Pi 3 (mit Windows 10 IoT Core)
via PuTTY einloggen.

Wie ich bereits in diversen Foren nachlesen konnte, soll der Login

Enter-PsSession -ComputerName <machine-name or IP Address> -Credential Administrator [/font]

sein, aber ehrlich gesagt 8o ich kapier nicht wie der konkrete Befehl aussehen soll.
Leider kann ich nirgends ein Beispiel finden.

Das Passwort ist dann wohl "p@ssw0rd", oder?

Danke und Gruß
Frank

22.07.2018 - 17:19 Uhr

Hallo zusammen,
ich suche seit längerem nach einer Möglichkeit, den CAN-Konverter Pican 2, der auf einem Raspberry Pi aufgesetzt wird, einen Treiber für Visual C# und Windows 10 IoT Core zu finden.

Leider läßt sich anscheinend der Pican 2 nur unter Linux betreiben.

Gibt es da wirklich keinen Windows-Iot-Treiber dafür oder kann mir jemand vielleicht einen Tipp geben?

Vielen Dank und Gruß
Frank

18.07.2018 - 10:49 Uhr

Hallo zusammen,
irgendwie hab ich noch nicht den Unterschied zwischen der suo- und der vssettings-Datei kapiert, die Visual Studio beim Exportieren der Einstellungen erstellt.

Außerdem hab ich das in dem verlinkten Artikel so verstanden, daß Visual Studio automatisch beim Abspeichern einer Solution automatisch eine suo.Datei anlegt. Allerdings sind in den allermeisten meiner Projekte keine suo-Datéi zu finden.

Gruß
Frank

04.06.2018 - 14:32 Uhr

War halt der Meinung, daß ein "leeres" endtag immer nur dann erlaubt ist, wenn das Element keinen Inhalt hat, z.B.

<?xml version="1.0" encoding="utf-8"?>
<Haushalt xmlns="http://www.haushalt.de">
  <Haus>
    <Adresse />
  </Haus>
</Haushalt>

Gruß
Frank

04.06.2018 - 14:24 Uhr

Hallo zusammen,
ich versuche per Linq ein XML-Tag mit einem Attribut zu schreiben:


// XML-Datei erzeugen
XNamespace am = "http://www.haushalt.de";

XElement household = new XElement(am + "Haushalt",
                                     new XElement(am + "Haus",
                                         new XElement(am + "Adresse",
                                             new XAttribute("Strasse", "Hauptstrasse"),
                                             new XAttribute("Hausnummer", "1")
                                         )
                                     )
                                  );

Diese Anweisung erfolgt die folgende Ausgabe:

<?xml version="1.0" encoding="utf-8"?>
<Haushalt xmlns="http://www.haushalt.de">
  <Haus>
    <Adresse Strasse="Hauptstrasse" Hausnummer="1" />
  </Haus>
</Haushalt>

Was mich stört ist, daß der Tag "Adresse" kein Endtag bekommt, was meiner Meinung nach richtig wäre. Habe noch nicht herausgefunden, was ich da falsch mache...

Danke und Gruß
Frank