PC soll z. B. Button anklicken

  • VB.NET

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von Elephant.

    PC soll z. B. Button anklicken

    Wenn man den Button anklickt, wird irgendwas gemacht.
    Nun soll der PC das auch aktivieren
    Muss ich "wird irgendwas gemacht" in eine eigene Sub schreiben und bei Button klick dann die Sub "wird irgendwas gemacht" aufrufen, sodass der PC auch die Sub "wird irgendwas gemacht" starten kann
    oder kann man dafür sorgen, dass der PC die Private Sub Button1_Click auslöst?

    Elephant schrieb:

    Muss ich "wird irgendwas gemacht" in eine eigene Sub schreiben und bei Button klick dann die Sub "wird irgendwas gemacht" aufrufen
    Das ist immer sinnvoll, sobald es mehr als ein supersimpler Einzeiler ist. Sonst müsstest Du, wenn Du die Aktion anders auslösen willst, den Code duplizieren oder mit Button.PerformClick arbeiten - was beides einfach nur unklug ist.
    Aber beide Wege haben nix damit zu tun, ob der PC irgendwas aktivieren kann. Der Button ist für den User gedacht, nicht für den PC. Was ganz genau soll in Deinem Wunschprogramm (automatisiert?) passieren?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Moinsen.

    Das Stichwort Automatisierung kommt mir in den Sinn.

    In der Softwareentwicklung gibt es das Konzept der Akteure, wobei der Benutzer und ein Computer als verschieden Typen angesehen werden.
    Aus der Sicht des "ausführenden" (Methode/Sub/Function/Operation) ist der Aufrufer (Akteur) vollkommen egal.

    Unter Windows gibt es die Windows-Dienste, das sind Programme mit Spezialisierung ohne grafische Oberfläche.
    Diese sind gut, um etwas zu überwachen und darauf gegebenenfalls zu reagieren.

    In Windows gibt es auch die Möglichkeit, mittels Aufgabenplanung zeitgesteuert (bedingt ereignisgesteuert) deine "mach was" aufzurufen.

    Um sowas zu automatisieren, wie einen Knopfdruck, nehme ich mir spezielle Programme zu Hilfe, wie AutoIT oder AutoHotkey.

    Die Windows-Dienste und/oder die Aufgabenplanung zu nutzen, ist aufwendig zu programmieren.

    Egal wie es kommt, es muss ein Programm laufen um, die Methode auszuführen und etwas was die Methode aufruft.

    Ich hoffe das, war nicht zu viel Info auf einmal...

    c.u. Joshi

    VaporiZed schrieb:

    Was ganz genau soll in Deinem Wunschprogramm (automatisiert?) passieren?

    Es ist ein kleines Spiel, wo ich jetzt ermöglichen will, dass der PC einen Mitspieler macht.
    Hatte gehofft es wäre einfacher, aber wie ich gelesen habe, ist es einfacher und Sinniger die Sachen in eine eigene Sub zu packen.

    Elephant schrieb:

    Es ist ein kleines Spiel, wo ich jetzt ermöglichen will, dass der PC einen Mitspieler macht.
    Das heißt also, dass Dein Programm die Aktion auslösen soll, nicht aber pauschal "der PC".
    Beschreibe mal detailliert den geplanten Ablauf.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Beschreibe mal detailliert den geplanten Ablauf.

    Das Programm wird gestartet, der Benutzer stellt ein das der PC mitspielen soll und startet das Spiel.
    Wer der Spieler PC dann an der Reihe ist, klickt er die Sachen an, die ein normaler Spieler auch anklicken würde.
    Wie schon geschrieben werde ich die Befehle in eine eigene Sub schieben und bei den anklickbaren Objekten dann den Aufruf der Sub reinschreiben.
    Sodass der Spieler PC nicht mehr die Objekte anklickt, sondern stattdessen die zugehörige Sub aufruft.

    Elephant schrieb:

    der Benutzer stellt ein das der PC mitspielen soll
    Wie darf ich mir das vorstellen?

    RodFromGermany schrieb:

    Das heißt also, dass Dein Programm die Aktion auslösen soll, nicht aber pauschal "der PC".
    Ich hatte angenommen, dass Dein Programm der Spieler sein soll.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Wie darf ich mir das vorstellen?

    Eine ComboBox in der die Anzahl der Spieler ausgewählt wird.
    Eine ComboBox in der man die Spielstärke des PS Spielers auswählt. Bei Spielstärke 0 spielt er nicht mit.

    RodFromGermany schrieb:

    Ich hatte angenommen, dass Dein Programm der Spieler sein soll.

    Nein, er soll kein externes Programm spielen, sondern nur einen Spieler im eigenen Programm.
    @Elephant Gehe ich Recht in der Annahme, dass Du ein Programm schreiben willst, dem Du ggf. die Anzahl von Spielern mitteilst, von denen einer Du selbst bist und die anderen von diesem Deinem Programm simuliert werden sollen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    und die anderen von diesem Deinem Programm simuliert werden sollen?

    Man soll es, wenn gewünscht, mit mehreren Personen spielen können und auf Wunsch noch mit einem PC Spieler dazu.
    Vermutlich wird man den PC Spieler nur aktivieren, wenn man es alleine spiel, um einen Wettbewerber zu haben.
    @Elephant Bist Du derjenige, der das Programm schreibt, welches Du so eloquent als "Der PC" benennst?
    Mögliche Antworten:
    Ja
    Nein.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Dann beschreib mal unter dieser Prämisse Dein Problem.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Dann beschreib mal unter dieser Prämisse Dein Problem.

    Es ging am Anfang nur darum, ob der Rechner (PC) einfach z. B. die Private Sub Button1_Click auslösen kann,
    oder ob ich die Befehle in der Sub Button_Click in eine eigene Sub schreibe, die dann Button_Click und der Rechner aufrufen können.
    Da hatte mir VaponZed schon geschrieben, dass es Sinniger ist die Befehle in eine eigene Sub zu stellen.
    Damit war die Frage beantwortet und das "Problem" gelöst.
    @Elephant Ich habe das Gefühl, dass Du völlig an Deinem Problem vorbei denkst.
    Wenn Du das Programm schreibst, gibt es dieses Problem nicht!
    Wenn der Rechner, also Dein Programm, am Zug ist, führt er aus, was auszuführen ist. Das wird von den Spielregeln diktiert.
    Was passierte zuvor?
    - Es wurde der Start-Button gedrückt
    oder
    - Der letzte Spieler hat seinen Zug getan.
    Diese Aktionen triggern das Drücken Deines Button durch das Programm.
    Feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Ich habe das Gefühl, dass Du völlig an Deinem Problem vorbei denkst.

    Den Eindruck habe ich nicht. Der Benutzer klickt für seine Aktion z. B. auf einen Button.
    Als ich angefangen bin das der PC die Rolle eines Spielers übernimmt, war mein Gedanke das er auch auf den Button klickt.
    Daher die Frage, ob der PC einfach den Button klick, auslösen kann oder ob ich die Befehle in eine eigene Sub packe.
    Eine andere Frage wird aber noch kommen: wie frage ich die Größe des freien RAM Speichers ab.

    Elephant schrieb:

    war mein Gedanke das er auch auf den Button klickt.
    Da nicht der PC, sondern Dein Programm selbst der Spieler ist, ist mit .PerformClick() Dein Problem gelöst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    ist mit .PerformClick() Dein Problem gelöst.

    Danke, bei den Button's funktioniert das gut.
    Bei der Sub für diverse PicBoxen die ich im Programm erzeuge, meckert er aber das ihm ein Parameter fehlt und ich bekomme nicht raus wie ich die angeklickte PicBox übergebe.
    Hier die Sub für die PicBoxen

    VB.NET-Quellcode

    1. Private Sub PicBox_Click(sender As Object, e As EventArgs)
    2. Dim X As Integer = CInt(DirectCast(sender, Control).Name)
    3. 'Diverse Befehle
    4. End Sub
    @Elephant So was:

    VB.NET-Quellcode

    1. PicBox_Click(PictureBox1, EventArgs.Empty)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    So was:

    Da war meine Beschreibung wohl nicht so gut.
    Wenn der Benutzer eine PicBox anklickt habe ich dann in X die Nummer der PicBox und kann damit weiter machen.
    Der PC Spieler denkt sich die Nummer der PicBox die er ankicken will per Zufallszahl aus.
    Wenn ich jetzt PicBox_Click(Zufallszahl, EventArgs.Empty) aufrufe bekomme ich in
    Dim X As Integer = CInt(DirectCast(sender, Control).Name)
    Diese Fehlermeldung:
    InvalidCastExeption wurde nicht behandelt.
    Das Objekt des Typs "System.Int32" kann nicht in "System.Windows.Forms.Control" umgewandelt werden.