Laden...

Forenbeiträge von reloop Ingesamt 139 Beiträge

07.11.2010 - 19:10 Uhr

Okay, verstehe.

Aber wo verwalte ich denn dann Validierungen für das Textfeld?

Mir geht gerade das Verständnis veloren, welchen Sinn dann eine Klasse macht?

(Die die richtige Uhrzeit formatiert / Ein Betragsfeld formatiert oder sonstiges..).

Sorry für mein unwissen!

        private void TextBox_LostFocus(object sender, RoutedEventArgs e)
        {
            var rZeit = new Regex(@"[0-2][0-9]:[0-6][0-9]");

            if (!rZeit.IsMatch(Text))
            {
                rZeit = new Regex(@"[0-2][0-9][0-6][0-9]");
                if (rZeit.IsMatch(Text))
                {
                    if (Text.Length != 0)
                    {
                        Text = Text.Substring(0, 2) + ":" + Text.Substring(2, 2);
                    }
                }
                else
                {
                    Text = "";
                }
            }
        }

Der Code funktioniert auch, liefert eine formatierte Uhrzeit zurück und das Binding funktioniert auch.

Nur die Codezeile im Konstruktor macht mir einen Strich durch die Rechnung.

07.11.2010 - 19:00 Uhr

Es soll eigentlich eine Filterung auf die Uhrzeit vornehmen, doch ich habe den Code jetzt Stück für Stück entfernt und gemerkt, wenn ich folgenden Eintrag aus dem Konstruktor entferne, funktioniert es:


              if (this.Text.Length == 0)
            {
                this.Text = "00:00";
            }

Kann sich das jemand erklären!? Vor allem habe ich genau diese Technik bereits in einem anderen Projekt schonmal verwendet, und dort funktionierte es.

Ich bin dezent verwirrt.

07.11.2010 - 18:32 Uhr

Heyho,

ich habe ein DataGrid, welches eine Spalte mit folgendem Aufbau beinhaltet:

                                    <DataGridTemplateColumn Header="Einkauf"  Width="Auto" >
                                        <DataGridTemplateColumn.CellTemplate>
                                            <DataTemplate>
                                                <ccGiControls:txtZeit Text="{Binding Einkauf, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ></ccGiControls:txtZeit>
                                            </DataTemplate>
                                        </DataGridTemplateColumn.CellTemplate>
                                    </DataGridTemplateColumn>

Er schreibt beim ändern des Inhaltes jedoch nichts zurück in meine List.

Ändere ich das "ccGiControls:txtZeit" jedoch in ein Standard "TextBox" Element:

                                    <DataGridTemplateColumn Header="Einkauf"  Width="Auto" >
                                        <DataGridTemplateColumn.CellTemplate>
                                            <DataTemplate>
                                                <TextBox Text="{Binding Einkauf, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ></TextBox >
                                            </DataTemplate>
                                        </DataGridTemplateColumn.CellTemplate>
                                    </DataGridTemplateColumn>

Funktioniert es einwandfrei. Das Objekt "txtZeit" befindet sich im selben Projekt und hat in seinem CodeBehind nichts stehen, was einfluss auf den .Text hätte.

Danke für die Hilfe

04.11.2010 - 21:16 Uhr

Hallo,

ich würde gerne dem Standard Steuerelement DataGrid eine zusätzliche Eigenschaft geben Namens "IsEditing".

Habe schon gegooglt, bin auf DependenyProperties und AttachedProperties gestoßen, doch wirklich weiter hat mich das alles nicht gebracht.

Für ein CodeBeispiel und / oder Hinweis wäre ich sehr dankbar.

Schöne Grüße,
reloop

03.11.2010 - 11:49 Uhr

Erledigt!

Eine Frage noch, zum persönlichen Verständnis:

List<T1> besitzt doch auch eine Methode Namens "contains". Der Unterschied zwischen den Beiden war für mich bisher noch nicht ersichtlich.

Danke für eure Hilfe,
reloop

03.11.2010 - 11:40 Uhr

Hey ujr,

danke für den Hinweis.

Habe es jetzt so gelöst:

            var hsKeys = new HashSet<Key>
                             {
                                 Key.LeftCtrl,
                                 Key.Down,
                                 Key.Up,
                                 Key.Left,
                                 Key.Right,
                                 Key.Enter,
                                 Key.LeftShift,
                                 Key.Tab
                             };
            if (hsKeys.Any(hsKey => hsKey == e.Key))
            {
                return;
            }

Gibt es einen grundlegenden Unterschied wieso du zum HashSet und nicht zur List tendiert hast?

Gruss,
reloop

03.11.2010 - 11:12 Uhr

Hallo Community!

Ich habe in einem KeyUp Event einen Codeabschnitt, der auf mich den Eindruck macht, als ob man ihn eleganter gestalten könnte.

Habt ihr vielleicht eine Idee wie?

            
if (e.Key == Key.LeftCtrl) return;
if (e.Key == Key.A && e.KeyboardDevice.Modifiers == ModifierKeys.Control) return;
if (e.Key == Key.Down) return;
if (e.Key == Key.Up) return;
if (e.Key == Key.Left) return;
if (e.Key == Key.Right) return;
if (e.Key == Key.Enter) return;
if (e.Key == Key.LeftShift) return;
if (e.Key == Key.Tab) return;

Sinn der Sache ist das Filtern gewisser Tasten, bei denen nichts passieren soll

Gruss,
reloop

31.10.2010 - 17:07 Uhr

Mir ist es ja schon fast unangenehm, aber wenn ich jetzt im KeyDown

View.refresh()

reinschreibe, leert er wieder, wie bereits am Anfang, mein Text. (Obwohl der Filter funktioniert!)

Bedeutet:

Ich tippe "X" und bekomme alle die mit "X" beginnen. Jedoch ist danach das Textfeld wieder leer. 😦

31.10.2010 - 16:26 Uhr

Hallo Talla,

danke für deinen Rat, ich habe es jetzt so umgesetzt.

Eine Frage habe ich noch:

Wie rufe ich am besten die Filtermethode auf? Setze ich im KeyDown einfach immer wieder den Filter aufruf neu?

Sprich:

View.Filter = new Predicate<object>(FilterMethode);

Danke,
ihr seid echt eine spitzen Hilfe!

31.10.2010 - 15:50 Uhr

'Hey zero_x,

ich habe nun folgendes eingebaut:


private ICollectionView View
        {
            get
            {
                return CollectionViewSource.GetDefaultView(SearchResult);
            }
        }

Damit wurde schon mal mein Problem behoben, dass der Text immer gelöscht wurde.

Nun habe ich nur noch ein Problem. Im KeyDown steht folgender Code:

            SearchResult = _service.GetSearchResult<SearchItem>(searchString);
            View.Refresh();

Die List SearchResult wird auch mit den gewünschten Daten gefüllt, jedoch steht beim öffnen der Combobox immer noch der Inhalt von vorher drin.

Sprich, er aktualisiert irgendwie den Inhalt nicht, obwohl SearchResult die richtigen Daten besitzt.

Danke schonmal für deine Hilfe(!)

31.10.2010 - 13:55 Uhr

Hey,

da hast du mich leider falsch verstanden.

Mein Problem, und zwar, dass nach jedem Zuweisen des ItemsSource, mein bereits getippter Text immer verschwindet.

Wenn ich ein X in die ComboBox Tippe, wird mein Event aufgerufen, der ItemsSource mit allen Texten die ein "X" enthalten gefüllt und danach ist mein ComboBox.Text aufeinmal wieder leer.

31.10.2010 - 13:37 Uhr

Danke für den Hinweis, aber selbst bei einer ObservableCollection wird der this.Text nach jedem KeyPress geleert.

31.10.2010 - 13:27 Uhr

private List<SearchItem> SearchResult { get { return _service.GetSearchResult<SearchItem>(this.Text); } }

        private void ComboBoxEditKeyUp(object sender, KeyEventArgs e)
        {
            //Hier liegt noch der Fehler dass nach jedem Buchstaben der Inhalt entfernt wird
            ItemsSource = SearchResult;

            this.ItemsSource = SearchResult;
            if (!this.IsPopupOpen)
            {
                this.IsPopupOpen = true;
            }
            if (SearchResult.Count == 1)
            {
                this.SelectedItem = SearchResult[0];
                this.IsPopupOpen = false;

                this.IsEnabled = false;
            }
        }

Gruss

31.10.2010 - 12:42 Uhr

Hallo,

ich habe eine ComboBox, der ich im KeyDown_Event einen neuen ItemSource zuweisen möchte. (Hintergrund: Ich möchte nur noch die Datenanzeigen, indenen "ComboBox.Text"-Inhalt enthalten möchte.

Mein Problem:

Ich tippe jetzt "M", dann öffnet sich im Debug der KeyDown-event, meine List wird zusammen gestellt mit allen Daten die ein "M" enthalten und dann als ItemsSource der Combobox zugewiesen.

Nach dem durchlauf der Routine ist aber der ComboBox.Text wieder leer und mein "M" folglich auch weg.

Wo liegt mein Fehler?

29.10.2010 - 17:58 Uhr

Nachdem ich die DLL aus dem Release Ordner mal verwendet habe, bekomme ich nun eine andere Fehlermeldung:

"Die Metadaten für die Assembly "myCustomControls" konnten nicht geladen werden. "

Edit:

Also, das Problem scheint bei Microsoft zu liegen, wenn man mit Netzlaufwerken arbeitet.

WPF Project on a network share with clr-namespace

Der Lösungsansatz:

"i have found a solution, works for my issues. <loadFromRemoteSources> Element "

Hat mir leider nicht weitgerholfen, ich bin erstmal auf Lokal umgezogen.

Jemand erfahrungen damit gemacht?

Gruss

29.10.2010 - 16:13 Uhr

Hallo Talla,

danke für den Link.

Geholfen hat er mir leider nicht. 😦

Wenn ich einfach Versuche per Hand die Einbindung vorzunehmen, erhalte ich folgenden Fehler:

Fehler 1 Die Assembly "myCustomControl" wurde nicht gefunden. Alle Assemblyverweise müssen vorhanden sein, und das Projekt sowie alle referenzierten Assemblys müssen erstellt worden sein.

Dabei steht sie unter Verweise und im CodeBehinde würde sie mir bei Bedarf auch vorgeschlagen!

29.10.2010 - 15:44 Uhr

Hallo,

ich hab folgendes Problem:

Ich erstelle ein neues Projekt (Benutzerdefinierte WPF-Steuerelementbibliothek) und lege erstelle mir dort eine eigene ComboBox.

Dann kompiliere ich das ganze und erhalte eine Datei mit dem namen:

"myCustomControls.dll"

Jetzt gehe ich in mein Hauptprojekt -> Verweis hinzufügen -> und wähle über Durchsuchen o.g. Datei aus.

Sie wird jetzt einwandfrei rechts unter Verweise angezeigt.

Gehe ich nun in mein XAML Dokument und versuche es über einen Namespace einzubinden, wird es mir nichteinmal über den IntelliSense vorgeschlagen.

Auch der Versuch per Hand folgendes zu integrieren, schlägt fehl:

xmlns:MyNamespace="clr-namespace:myCustomControls;assembly=myCustomControls".

Wenn ich jedoch in die Code Ansicht wechsel, und folgendes Tippe:

var myCombo = new myCustomComboBox();

Erhalte ich den Hinweis, dass ich (zumindest im CodeBehind) die Datei "myCustomControl" über ein Using einbinden kann.

Es hängt nur am einbinden im Namespace.

Besten Dank und ich hoffe ihr versteht mein Problem.

27.10.2010 - 08:42 Uhr

Hallo,

ich habe eine Frage zur Optik im Visual Studio. Und zwar bin ich über einen Codeausschnitt gefallen, der wie folgt aussieht:

Kann mir vielleicht jemand sagen, wie ich im VS diese grauen Linien aktiviere?

Gruss

26.10.2010 - 11:46 Uhr

ICH HABS! 😃

Lösung ist wiefolgt:

 
ObjectHandle returnValue;

returnValue = Activator.CreateInstance("ASSEMBLY-NAME", "ASSEMBLY-NAME.CONTROL_NAME");
var myControl= (UIElement)returnValue.Unwrap();

grdUserControl.Children.Add(myControl);

Danke für eure Hilfe!

26.10.2010 - 11:40 Uhr

Sorry, ich scheine mich immernoch unklar auszudrücken. Ich versuchs nochmal.

RechnungsControl rc = new RechnungsControl();
grid.Children.Add(rc);

Das ist der Knackpunkt!

Ich kenne an der Stelle nur den Namen, sprich: "RechnungsControl". Er könnte aber auch "BenutzerControl" oder "InfoControl" sein, ergo möchte ich Ihn nicht fest im Code hinterlegen, sondern mal im PseudeCode gesprochen folgendes machen:

var MeinControl = Erstelle.Instanz(string);
grid.Children.Add(MeinControl)

(String ist in dem Fall z.B: "RechnungControl" oder "BenutzerControl" etc.)

Nochmal Danke für eure Mühe und pardon für meine missverständliche Erklärung.

26.10.2010 - 11:20 Uhr

Ich kann gerade nicht ganz folgen, inwiefern ich das umsetzen soll.

Kurze Beschreibung der Sachlage:

Ich verwalte mein Hauptmenü in einer Tabelle mit dem Verweis auf das UserControl. (Das UserControl enthält bei mir quasi die gesamte GUI für den Menüpunkt).

Ergo sieht das ungefähr so aus:

DisplayCaption | UserControl

Rechnung | RechnungControl
Benutzerverwaltung | BenutzerControl

etc.

Nun fülle ich aus der Tabelle mein Menü und möchte das beim KLICK auf das Menü das UserControl "RechnungControl" z.B. ins Grid geladen wird.

Ich hoffe, ihr könnt mir folgen.

Danke für eure Hilfe & Mühe.

26.10.2010 - 11:06 Uhr

FindName() ist in etwa das wo ich hinmöchte, liefert mir aber leider kein UIElement zurück.

Ich möchte einem Grid ein UIElement (UserControl) als Inhalt zufügen. Kenne aber zum besagten Zeitpunkt nur den Namen (als String).

Jetzt möchte ich Quasi eine Instanz des UserControls über den Namen erstellen.

Quasi:
Activator.CreateInstance("RechnungControl", "UIElement");

Jedoch liefert dieser mir nur einen ObjectHandle zurück, den ich laut MSDN "entwrappen" muss. Damit konnte ich jedoch (bisher) nichts anfangen.

26.10.2010 - 10:49 Uhr

Hallo liebe Community,

ich habe folgendes Problem:

Ich verwalte in einer Tabelle mein Hauptmenü. Dort hinterlegt sind DisplayCaption und UserControl. (Beides strings)

Jetzt habe ich z.b. ein RechnungsControl welches ich beim klick laden möchte.

Nun stehe ich vor dem Problem dass:

grid.Childen.Add() ein UIElement von mir erwaret, ich aber nur den Namen von diesem habe und jetzt eine Instanz davon erzeugen muss.

Könnt ihr mir weiterhelfen?

Gruss

15.10.2010 - 12:21 Uhr

Hallo liebe Community,

wonach muss ich im Internet suchen wenn ich informationen darüber möchte, wie ich recht schnell und einfach meine WPF Anwendung auch im Browser ausführbar mache?

Danke für eure Hilfe,
meine Suche brachte bisher leider nicht den gewünschten Erfolg.

MfG
cs.

Nachtrag:
Manchmal ist es doch einfacher als man denkt.

Hat sich erledigt! Folgender Link hat mir geholfen:

Gewusst wie: Erstellen eines neuen WPF-Browseranwendungsprojekts

08.10.2010 - 17:39 Uhr

Also mir geht es da um folgendes:

Ich erzeuge aus meiner Form heraus (über eine DLL) eine XML Datei und lese diese auch aus.

Angenommen ich rufe aus meiner Form jetzt die Funktion auf:

readXML()

möchte ich, dass das programm einfach weiterläuft, wenn die Funktion erfolgreich verarbeitet wurde, jedoch wenn die Datei z.b. nicht existiert, mein readXML ein Array zurückggibt, mit dem Status = false und evtl einer Meldung = "Die XML Datei ist nicht vorhanden."

Die Statusklasse wäre also in ihrem simpelsten Zustand:

    public class ReturnStatus
    {
        public ReturnStatus()
        {
            Status = true;
        }

        public bool Status { get; set; }
        public string Meldung { get; set; }
    }

Was hältst du von dieser Variante?

08.10.2010 - 16:51 Uhr

Klasse, das mit der Statusklasse werde ich so umsetzten. Danke für den Hinweis!

08.10.2010 - 16:45 Uhr

Bedeutet im Umkehrschluss aber, dass meine Funktionen alle in einem Try aufgerufen werden, richtig?

Und hättest du evtl. kurz ein Beispiel wie das aussehen würde?


public Exception CheckData()
{
   if "alles richtig, dann arbetie weiter"

   else 
      "fülle meine exception mit meinem rückgabe array" o.ä.

}

Beste Grüße & Danke für die Hilfe,

cs.

08.10.2010 - 16:37 Uhr

Hallo,

ich habe folgendes Problem - bzw. eher Frage.

Wie realisiert ihr bei euren Anwendung die Rückmeldung der Funktionen?

Angenommen, ich habe eine Form, diese Ruft eine Funktion aus meiner DLL auf, die irgendetwas prüft (Korrektur der Daten oder sonstiges).

Diese rufe ich dann auf mit myFunction().

Wenn diese Funktion jetzt fehlerfrei durchlaufen wurde, soll die Verarbeitung weiterlaufen. Wenn jedoch ein Fehler aufgetreten ist, würde ich gerne dass die Funktion ein Array mit Daten zurückliefer, wo drin stand, was evtl. schief lief etc.

Nun würde ich gerne einfach mal wissen, wie Ihr in diesem Fall reagiert / agiert.

Sprich, wie eure Rückmeldungen aus Functionen aussieht, die ihr in eure Programme einbindet.

Ich hoffe mein Anliegen ist nachvollziehbar.

Danke für eure Hilfe,

Gruß,

cs.

08.10.2010 - 16:26 Uhr

Danke, inflames2k.

Deine Antwort war die Lösung meines Problems.

Gruss,
cs.

08.10.2010 - 12:12 Uhr

Eine kurze Frage, das Thema betreffend, hätte ich noch:

Wie kann ich eine List durch eine XML Datei füllen und selbigen Weg zurück gehen?

Ich habe eine Klasse, welche als Eigenschaft eine List<> besitzt.

            XmlSerializer xs = new XmlSerializer(typeof(myClass));
            StreamWriter sw = new StreamWriter(thePath);
            xs.Serialize(sw, this);

Das war mein Versuch, der führte jedoch nicht zum gewünschten Ergebnis. Dabei ist zu dem Zeitpunkt this.myList<> mit den gewünschten Datein gefüllt.

Danke für eure Hilfe,

cs.

07.10.2010 - 16:12 Uhr

War auch nur rein aus Interesse! Habe jetzte eine Datenklasse geschrieben, die dass ganze mit der XML Datei verarbeitet.

Vielen Dank für deine schnelle Hilfe!

07.10.2010 - 15:52 Uhr

Verstanden!

Dies würde aber vorraussetzen, dass meine Datenklasse alle Eigenschaften enthält, die ich später auf der Form ausgeben möchte, richtig?

Alles klar, danke für den Weg. Macht natürlich mehr Sinn und ist wesentlich einfacher später bei der Verarbeitung.

Ich muss mein Grundkonzept an der Stelle nochmal überdenken, aber ich weiß nun in welche Richtung es geht.

Zu meiner Anfänglichen Frage; ist es denn überhaupt möglich über einen String auf das Element zu kommen?

(Nur zum Verständnis)

myElement = "txtTest"
this.GetElement(myElement).getType().getProperty("Text").ToString()

oder ähnlich..?

Danke für deine Hilfe ( .. und Geduld!)

Gruss

07.10.2010 - 15:35 Uhr

Ich steh gerade etwas auf dem Schlauch, wie sage ich meiner XML Datei denn, das z.B. das Feld txtEinkauf nicht leer sein darf - und lasse das durch die Form prüfen?

Ich bin folgenden Weg gegangen:

Es existiert eine DLL, die eine XML Datei einliest und in folgendes Format überträgt:

(Klasse: CheckItem)
ObjektName: "txtEinkauf"
Pflichtfeld: true
Meldung: "Individuelle Fehlermeldung bei leerem Eingang vom Kunden"

Jetzt instanziere ich die DLL in meiner EXE und bekomme von dieser eine List<CheckItem> geliefert, wo sich auch mein txtEinkauf wiederfindet.

Jetzt würde ich entweder gerne

  1. ) direkt in der Form ein MaskePrüfen() einbauen, mit folgendem ablauf: (In Pseudecode gesprochen)

for each item in List<CheckItem>
Prüfe ob das Objekt mit dem Name "ObjektName" gefüllt ist
wenn nicht, darf nicht gespeichert werden

oder

2.) Ich übergebe die Form an meine DLL und Prüfe dort die Elemente.

Ich hoffe du kannst mir folgen - und meine Gedankengänge sind nicht allzu verwirrend.

Danke nochmal, für deine Mühe.

Gruss

07.10.2010 - 15:19 Uhr

Wenn ich meinem Anwender die Möglichkeit bieten möchte, selbst zu entscheiden, welche Elemente einer Maske Pflicht sind und welche nicht, läuft es doch zwangsläufig darauf hinaus dass meine Klasse wissen muss, welche Objekte sich auf der Form befinden?

Bzw. diese Infos aus einer anderen Quelle (in dem Fall XML) bezieht.

Danke für deine Hilfe!

07.10.2010 - 15:03 Uhr

Hallo,

erstmal Pardon für das evtl. nicht wirklich sprechende Thema, mir ist jedoch keine wirkliche (kurze) Umschreibung eingefallen.

Und zwar habe ich folgendes Problem:

Ich habe auf meiner "Form" ein Objekt welches den Namen "txtEinkauf" besitzt.

Angenommen ich habe einen String mit dem Inhalt "txtEinkauf" - wie schaffe ich es nun mithilfe dieser Variable auf das Objekt zuzugreifen? Quasi:

myString = "txtEinkauf";
getElementByName(myString).Text = "Text für das Feld txtEinkauf";

Hintergrund ist folgender, dass ich über eine seperate Klasse steuer, welche Objekte auf der Form Pflichtfelder sind und welche nicht. Und die Verwalte ich in einer XML - Datei. Somit möchte ich vor dem speichern prüfen, ob die (vorher über die Einstellungen definierten ) Pflichtfelder auch einen Wert enthalten.

Danke für eure Hilfe,

cs.

16.09.2010 - 08:13 Uhr

Danke, gfoidl. Nachdem ich deinen Rat befolgt habe, hat es einwandfrei funktioniert.

Noch eine Anfängerfrage zum Schluss, kann ich mit Visual Studio 2008 auch auf .NET4 gehen? Und wenn ja, wie?

Danke für eure Hilfe.

16.09.2010 - 00:04 Uhr

Hallo Leute,

mir ist es fast schon unangenehm, doch ich komme einfach nicht weiter.

Ich möchte ein WPF Datagrid mit dem Inhalt einer "List" füllen. Füge ich einen Datensatz in die List ein, wird mit auch im Grid ein Datensatz angezeigt. Jedoch jedes mal ohne text!

Bedeutet:

Mein Grid:

        <t:DataGrid x:Name="grdUe"
                ItemsSource="{Binding}"
                Grid.Row="1"
                Grid.ColumnSpan="2" AutoGenerateColumns="False">
            <t:DataGrid.Columns>
                <t:DataGridTextColumn Header="Datei" Binding="{Binding nr}" Width="*" />
            </t:DataGrid.Columns>
        </t:DataGrid>

Gibt beim Binding "nr" nichts aus!

List sieht wie folgt aus:

        public Window1()
        {
            InitializeComponent();

            this.DataContext = new List<test>(){
                (new test{ nr="test" })
        };
        }

        public class test
        {
            public string nr;
        }
    } 

Ich hoffe ihr könnt mein Problem nachvollziehen. Wie gesagt, das Binding allgemein scheint zu funktionieren, da ich einen Datensatz ( Bzw. soviele Datensätze im Grid sehe wie in der List enthalten ) aber es wird mir kein Text (in dem Fall der Wert aus "nr" angezeigt).

MfG

21.06.2010 - 18:47 Uhr

Das wäre ja quasi hier soetwas:

Ausführliches TCP und UDP Tutorial

Kann ich mit dieser Technik auch über das Internet kommunizieren?

21.06.2010 - 18:16 Uhr

Hallo liebe Community,

erstmal pardon für dieses nicht's sagende Thema. Leider fehlt mir der Fachbegriff (Ich wäre dankbar, wenn jemand diesen noch ergänzen könnte) um mein Problem zu definieren.

Folgende Aufgabenstellung:

Ich möchte von PC1 einen String an PC2 schicken. Diese PC's sind jedoch nicht übers LAN miteinander Verbunden, sondern lediglich übers Internet erreichbar.

Quasi stelle ich es mir so vor, dass ich bei PC1 einen Server laufen habe und von PC2 einen Client starte und mich mit der IP vom Server verbinde. Dieser soll dann Strings empfangen können. (Banal gesagt. z.B: ein "shutdown", damit er herunter fährt, oder ein shortcut zum Sichern von Daten, was da passiert, ist ja erstmal 2t Rangig).

Welche Technik empfiehlt ihr mir also um dieses Problem umzusetzen?

Vielen dank für eure Hilfe,

cs.