Laden...

Forenbeiträge von 123thomas Ingesamt 124 Beiträge

26.01.2021 - 07:01 Uhr

Hallo,

du musst zu dem Button ein Klick-Event hinzufügen. z.B. mit dem Namen Button_Click(object sender).

Damit kannst du jeden Button deiner Form dieses Klickevent zuweisen. Dann kannst du mit einer Switch Anweisung auf dem Namen des senders, den Button herausfinden, welcher den Klick ausgelöst hat.

Gruß

07.01.2021 - 07:01 Uhr

Hallo Tommylik,

da bist du leider auf der falschen Fährte. Das was du da gefunden hast ist scheinbar eine Entwicklungsumgebung, damit du dir Plugins in das Tool Zenon einbauen kannst.

Ich mein rein theoretisch kann man sich darüber einen Plugin bauen, welches dann die Schnittstelle herstellt zu dem Container. Aber dies wäre oversized. Daher musst du in der Richtung nochmal weitersuchen. API oder Interface oder ähnliches.

Bist du dir denn sicher, dass das Tool eine Schnittstelle zu C# bereit stellt? Oder bist du einfach mal mit C# angefangen?

05.01.2021 - 15:02 Uhr

Ich denke das Zenon RT die Schnittstelle ist. Im Zenon Editor wurden die Variablen
angelegt die dann durch den Onlinecontainer an VBA übergeben werden.

Korrekt, dass denke ich auch. Und du musst ja nun auf den Onlinecontainer mit C# zugreifen. Und diese Schnittstelle kenne ich nicht. Da musst du dich informieren.

Google doch mal nach API von Zenon.

05.01.2021 - 11:56 Uhr

Hallo Tommylik,

vielen Dank dafür.

So wie ich das sehe werden die Variablen "PDE_PraegeCode" "PDE_FolderName" "PDE_CreateFolder" "PDE_NoFolder" "PDE_NoFile" "PDE_FileCopy" in der VISU benutzt, d.h. du musst ja eine Schnittstelle zwischen der S7 und C# aufbauen, um diese auszutauschen. Ist eine Schnittstelle in deinem Programm schon vorhanden?

05.01.2021 - 09:56 Uhr

Hallo Tommylik,

dass kann man nicht ohne Hintergrundwissen umschreiben.

Da die mit plus eingerahmten Zeilen eine Änderung in S7 (Vermutlich Tia Portal) ist. Es verändert deine S7 Variablen.

Die beiden Variablen:
PDE_CreateFolder wird auf 0 gesetzt
PDE_NoFolder wird auf 1 gesetzt

d.h. du musst uns zeigen, wie du die oben genannten Variablen aus Tia Portal im Programm integriert hast.

Wenn Tia Portal komplett aus der Aktion fällt würde man dies vermutlich komplett wegfallen lassen, da man über if Abfragen raus bekommt, ob der Ordner vorhanden ist.

Gruß Thomas

06.11.2020 - 11:29 Uhr

Hallo,

bei deiner Methode Pw erzeugst du in der ersten Zeile eine neue leere Liste. Diese Leere Liste kann nichts enthalten.

Du musst also die Liste mit dem Hinzugefügten Mitarbeiter übergeben oder diese in deiner Klasse als Variable initialisieren und dann mit Hinzufügen und Suchen auf diese EINE Liste zugreifen.

Gruß

08.06.2020 - 07:03 Uhr

Hallo,

datei Pfade auswählen zu lassen geht über den OpenFileDialog.
Einfach nach "C# OpenFileDialog" googeln.

14.05.2020 - 07:36 Uhr
   
                DateiAnzahl_Ziel += DiInfo.GetFiles().Length;                 
  

Warum der Progressbalken zu schnell vollläuft liegt vermutlich an der oben genannten Zeile. Du Summierst bei jedem "Tick" die Dateien im Zielverzeichnis auf.

Besipiel:
Tick| Reale Dateien im Zielverzeichnis|Dateien in Zielverzeichnis nach deiner Berechnung
1|2|2
2|2|4 <-- obwohl keine Datei hinzugekommen ist, addierst du nochmal 2 hinzu.
3|3|7

Gruß Thomas

26.03.2020 - 07:09 Uhr

Hallo,

ich würde sobald ein Objekt in einer Combobox ausgewählt wird, dies zusätzlich in eine Liste List<DeineKlasse> packen.

Wenn nun das zweite Objekt in der zweiten Combobox ausgewählt wird, wird die gesamte Liste durchlaufen, ob das Objekt, oder die Artikelkategorie, schon vorhanden ist.

Versuch es doch mal und dann geben wir die Tipps wie du es noch verbessern kannst

19.03.2020 - 13:19 Uhr

Invoke ist kein Problem. Die Referenz der UI in der Logik ist das Problem.

Stimmt natürlich, bei seinem aktuellen Problem.
Aber spätestens mit einem Task oder Thread o.ä. wird er dann auf das Problem stoßen.

19.03.2020 - 08:14 Uhr

Genau und da gibt es zwei Hauptmöglichkeiten:

  1. Die Instanz der Form holen und dann anzeigen lassen (hier gibt es aber mehrere Probleme: Stichwort Invoke)
  2. Die Logik schmeist ein Event, welches bei der Form angemeldet ist

Die Lösung zwei ist die Lösung die am wenigsten Probleme bereitet.

Gruß Thomas

25.02.2020 - 10:03 Uhr

Nochmal eben als Anmerkung, dass dein Code oben auch noch weitere Fehler enthält.

Du erstellst zwar 4 Fahrräder aber überschreibst immer die Eigenschaften des Fahrrad1.

29.11.2019 - 07:41 Uhr

Hallo tristar,

du kannst du die Menüleiste einmal erstellen und dann die Instanz des Objektes weiterreichen.

Gruß Thomas

29.11.2019 - 07:38 Uhr

Hallo tristar,

das Wort was du suchst ist Anchor. Mit der Eigenschaft kannst du bestimmt, wie sich das Control verändert, wenn sich die Größe der Form ändert. Allerdings kann es bei komplexen Sachen auch dazu kommen, dass man die Größe selber berechnen und setzen muss.

Control.Anchor

Gruß
Thomas

07.11.2019 - 08:18 Uhr

Hallo Tommylik,

ich kenne dein Lebenslauf, ich habe ähnlich angefangen.

Bitte gehe weg von dem Static. Da man dies nicht testen kann. Ich habe dir mal 2 Beispiele gemacht, einmal alles in einer Klasse und einmal so wie du es vor hattest die Liste der ComboBoxen in eine zweite Klasse auszulagern, aber ohne Static.

Sieht alles viel aus, aber ist im Prinzip fast das gleiche.

Beispiel 1:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        //Leere Liste erzeugen in der ComboBoxen abgelegt werden können(Damit diese später gehändelt werden können)
        private List<ComboBox> listComboBox = new List<ComboBox>();

        //Zählvariable um die ComboBoxen zu identifizieren zu können
        private int idComboBox = 0;

        public Form1()
        {
            //Steuerelemente die im Designer angelegt wurden erzeugen und anzeigen
            InitializeComponent();
        }

        private void Form1_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                //Leere Combobox erzeugen
                ComboBox comboBox = CreateComboBox(e.X, e.Y);
                //Steuerelment zu der Form hinzufügen
                Controls.Add(comboBox);
            }

            if(e.Button == MouseButtons.Left)
            {
                //ComboBox mit Einträge erzeugen
                ComboBox comboBox = CreateComboBoxWithItems(e.X, e.Y);
                //Steuerelment zu der Form hinzufügen
                Controls.Add(comboBox);
            }
        }

        private ComboBox CreateComboBox(int x, int y)
        {
            //Grundeigenschften festlegen
            ComboBox comboBox = new ComboBox();
            comboBox.FormattingEnabled = true;
            comboBox.Location = new System.Drawing.Point(x, y);
            comboBox.Name = "comboBox" + idComboBox;
            comboBox.Size = new System.Drawing.Size(121, 21);
            comboBox.TabIndex = idComboBox;

            //Event erzeugen, was beim auswählen eines Items passiert
            comboBox.SelectedIndexChanged += ComboBox_SelectedIndexChanged;                   

            //ComboBox mit in die Liste aufnehmen
            listComboBox.Add(comboBox);

            //Id erhöhen
            idComboBox++;

            //ComboBox zurück geben
            return comboBox;
        }

        private ComboBox CreateComboBoxWithItems(int x,int y)
        {
            //Erzeuge mit der ersten Methode eine ganz normale Combobox
            ComboBox comboBox = CreateComboBox(x, y);
            //Füge einträge in diese ComboBox ein
            AddDefaultItems(comboBox);
            //Gebe die Combobox zurück
            return comboBox;
        }

        private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            // Mach was beim Ändern
            //Achtung wird beim Ändern aller Comoboxen aufgerufen
            
            //Combobox Casten
            ComboBox comboBox = (ComboBox)sender;

            //nur bei der zweiten ComboBox ausführen
            if (comboBox.Name.Equals("comboBox1"))
                MessageBox.Show("Glückwunsch, Sie haben die ComboBox 2 erwischt (index 1)","Glückwunsch");

            //Ausgabe der Änderung, als Beispiel was man alles für Daten bei dem Event abgreifen kann
            MessageBox.Show("SelectedIndexChanged von " + comboBox.Name + " auf index: " + comboBox.SelectedIndex.ToString() + "(" + comboBox.Items[comboBox.SelectedIndex].ToString() + ")", "Info");
        }

        private void AddDefaultItems(ComboBox comboBox)
        {
            //Füge Einträge auf die referenzierte ComboBox ein
            comboBox.Items.Add("Eintrag1");
            comboBox.Items.Add("Eintrag2");
            comboBox.Items.Add("Eintrag3");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //Lösche alle Comboboxen beim Klick auf Button 1

            //Gehe alle Elemente aus der Liste:listComboBox durch
            foreach(ComboBox comboBox in listComboBox)
            {
                //lösche die aktuelle ComBoBox von der Form
                Controls.Remove(comboBox);
            }

            //setzte die ID zurück
            idComboBox = 0;
        }
    }
}

Beispiel 2:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        private InhaltList inhaltList;

        public Form1()
        {
            //Steuerelemente die im Designer angelegt wurden erzeugen und anzeigen
            InitializeComponent();

            //Liste erzeugen mit STartindex 10
            inhaltList = new InhaltList(10);
        }

        private void Form1_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                //Leere Combobox erzeugen
                ComboBox comboBox = inhaltList.CreateComboBox(e.X, e.Y);
                //Steuerelment zu der Form hinzufügen
                Controls.Add(comboBox);
            }

            if(e.Button == MouseButtons.Left)
            {
                //ComboBox mit Einträge erzeugen
                ComboBox comboBox = inhaltList.CreateComboBoxWithItems(e.X, e.Y);
                //Steuerelment zu der Form hinzufügen
                Controls.Add(comboBox);
            }
        }             


        private void button1_Click(object sender, EventArgs e)
        {
            //Lösche alle Comboboxen beim Klick auf Button 1

            //Gehe alle Elemente aus der Liste:listComboBox durch
            foreach(ComboBox comboBox in inhaltList.GetAllComboBox())
            {
                //lösche die aktuelle ComBoBox von der Form
                Controls.Remove(comboBox);
            }

            //setzte die ID zurück (Achtung, wenn vorher der Startindex bei 10 war, dann ist nach dem Löschen der Index wieder bei 0)
            inhaltList.IdComboBox = 0;
        }
    }

    public class InhaltList
    {
        //Leere Liste erzeugen in der ComboBoxen abgelegt werden können(Damit diese später gehändelt werden können)
        private List<ComboBox> listComboBox = new List<ComboBox>();

        //Zählvariable um die ComboBoxen zu identifizieren zu können
        private int idComboBox = 0;
        //Property, welches eine referenz von idComboBox setzt und liest
        public int IdComboBox { get => idComboBox; set => idComboBox = value; }

        //Konstruktor
        public InhaltList()
        {
            //hier muss nichts gemacht werden. Es sei denn man möchte was übergeben
        }

        public InhaltList(int startIndexListe)
        {
            //möglich wäre eine Id Vorzugeben mit der gesartet werden soll.
            this.idComboBox = startIndexListe;
        }

        public ComboBox CreateComboBox(int x, int y)
        {
            //Grundeigenschften festlegen
            ComboBox comboBox = new ComboBox();
            comboBox.FormattingEnabled = true;
            comboBox.Location = new System.Drawing.Point(x, y);
            comboBox.Name = "comboBox" + idComboBox;
            comboBox.Size = new System.Drawing.Size(121, 21);
            comboBox.TabIndex = idComboBox;

            //Event erzeugen, was beim auswählen eines Items passiert
            comboBox.SelectedIndexChanged += ComboBox_SelectedIndexChanged;

            //ComboBox mit in die Liste aufnehmen
            listComboBox.Add(comboBox);

            //Id erhöhen
            idComboBox++;

            //ComboBox zurück geben
            return comboBox;
        }

        public ComboBox CreateComboBoxWithItems(int x, int y)
        {
            //Erzeuge mit der ersten Methode eine ganz normale Combobox
            ComboBox comboBox = CreateComboBox(x, y);
            //Füge einträge in diese ComboBox ein
            AddDefaultItems(comboBox);
            //Gebe die Combobox zurück
            return comboBox;
        }

        public void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            // Mach was beim Ändern
            //Achtung wird beim Ändern aller Comoboxen aufgerufen

            //Combobox Casten
            ComboBox comboBox = (ComboBox)sender;

            //nur bei der zweiten ComboBox ausführen
            if (comboBox.Name.Equals("comboBox1"))
                MessageBox.Show("Glückwunsch, Sie haben die ComboBox 2 erwischt (index 1)", "Glückwunsch");

            //Ausgabe der Änderung, als Beispiel was man alles für Daten bei dem Event abgreifen kann
            MessageBox.Show("SelectedIndexChanged von " + comboBox.Name + " auf index: " + comboBox.SelectedIndex.ToString() + "(" + comboBox.Items[comboBox.SelectedIndex].ToString() + ")", "Info");
        }

        public void AddDefaultItems(ComboBox comboBox)
        {
            //Füge Einträge auf die referenzierte ComboBox ein
            comboBox.Items.Add("Eintrag1");
            comboBox.Items.Add("Eintrag2");
            comboBox.Items.Add("Eintrag3");
        }

        public List<ComboBox> GetAllComboBox()
        {
            return this.listComboBox;
        }
    }
}

Gruß Thomas

25.09.2019 - 12:53 Uhr

Hallo,

es gibt mehrere Wege nach Rom. 😛

Also wenn das 2D Array sich nicht verändert einfach mit einer for Schleife arbeiten. Wenn sich die Anzahl der Werte später ändern kann, dann würde ich mir das benötigte Array aus dem 2D Array holen und mit foreach ausgeben.

Gruß Thomas

23.08.2019 - 06:48 Uhr

Hallo,

beide Variablen sind nicht zugewiesen, nur hört der Compiler nach der ersten Anweisung in der Zeile auf.

a = parts[0]; //Zuweisung der Variable a

Da man nicht ganz genau sehen kann, ob a jetzt ein Array ist oder eine normal String Variable tippe ich mal auf eine String Variable.

D.h. das sowohl a[0] und auch b[0] nicht zugewiesen sind, da dies ja keine Arrays sind.

P.S. bitte den Code nicht als Bild sonder in den Code Tags Posten

16.04.2019 - 06:34 Uhr

Hallo,

in dem Setup Project musst du das Icon auch noch auswählen.

Gehe dazu in dem Prohjektmappen-Explorer auf dein Setup Projekt ( Auf dem Hauptpunkt)
Dann erscheinen unten die Eigenschaften
Dort ist ein Punkt: "AddRemoveProgrammIcon" dort muss auch das Programm Icon ausgewählt werden

Gruß Thomas

28.01.2019 - 07:21 Uhr

Hallo,

du sendest ja in der DisplayTxt immer direkt den nächsten Befehl an die Serielle Schnittstelle. Wenn der Arduino immer auf einen Befehl antwortet ist es korrekt, das es in einer Dauerschleife endet.

Gruß
Thomas

10.01.2019 - 15:02 Uhr

Hallo,

ich habe das Schnipsel mal um den Namen der Form erweitert.

int counter = 1;
foreach(var entry in data)
{
    var serverForm = new MonitorForm();
    serverForm.LoadServerData(entry);
    serverForm.TopLevel = false;
    serverForm.Name = "monitoringPanel "+counter;
    serverForm.Text = "monitoringPanel "+counter;
    monitoringPanel.Add(serverForm);
    serverForm.Show();
    counter++;
}
03.01.2019 - 12:01 Uhr

Hast du dann die Konfiguration auf 64 bit konfiguriert?

Gruß

18.12.2018 - 14:36 Uhr

Bei einem Double muss das Komma durch ein Punkt ersetzt werden.

Gruß Thomas

10.12.2018 - 09:18 Uhr

Hallo,

was wird den in "Verbunden();" ausgeführt?

27.11.2018 - 07:30 Uhr

Hallo,

ich habe gerade mal geschaut was dein Problem ist:
1.Du hast try, catch nicht verstanden 1.Du öffnest immer COM1 1.Wie meine Vorredner schon sagten, fehlt dir die Objektorientierte Programmierung

zu 1:


try
{
  //hier wird Code ausgeführt

 //wenn hier am Ende angekommen ist, dann ist alles gut verlaufen
}
catch ( Exception ex)
{
  //kommt er in den catch, dann wurde der try Block nicht bis zu Ende ausgeführt und es wurde ein Fehler ausgelöst.
 //daher sollte hier der Fehler abgefangen (ex.Message) und dem Benutzer wie auch immer angezeigt werden
}

zu 2:
Man kann zwar in der ComboBox ein Com Port auswählen, allerdings wird der COM Port nicht dem SerialPort zugewiesen

zu 3:
Erstelle eine Klasse für den SerialPort und implementiere nur die Schnittstellen, die du zu dem Serialport benötigst, damit du nicht alles kopierst.

Wenn du im try catch den Fehler abgefangen hättest wäre dir angezeigt worden, dass der COM1 bereits geöffnet ist. Obwohl nirgends der COM1 ausgewählt wurde.

Gruß
Thomas

23.11.2018 - 11:26 Uhr

Hallo,
ich weiß noch nicht ganz genau was es ist aber:

VS 2017 Fehler des Programms wie oben genannt
VS 2013 Funktioniert

Obwohl ich in den Projekteinstellungen das selbe .Net Framework eingestellt habe.

Danke 😃

23.11.2018 - 09:56 Uhr

Hallo,

erstmal Vielen Dank für deine Bemühungen und entschuldige das ich jetzt erst an dem Projekt weiter gearbeitet habe.

Ich hab mir dein Beispiel Projekt angesehen. Und die Einstellungen eingestellt. Also auf x64 konfiguriert. Die PID des Explorers erst manuell eingestellt und dann automatisch gesucht. Und NuGet Paket geladen.

Aber in der Zeile:

EasyHook.RemoteHooking.Inject(targetPID, "", injectionLibrary, channelName);

Bekomme ich die Fehlermeldung:> Fehlermeldung:

System.ApplicationException
HResult=0x80131600
Nachricht = STATUS_INTERNAL_ERROR: Unknown error in injected C++ completion routine. (Code: 15)
Quelle = EasyHook
Stapelüberwachung:
at EasyHook.NativeAPI.Force(Int32 InErrorCode)
at EasyHook.RemoteHooking.InjectEx(Int32 InHostPID, Int32 InTargetPID, Int32 InWakeUpTID, Int32 InNativeOptions, String InLibraryPath_x86, String InLibraryPath_x64, Boolean InCanBypassWOW64, Boolean InCanCreateService, Boolean InRequireStrongName, Object[] InPassThruArgs)
at EasyHook.RemoteHooking.Inject(Int32 InTargetPID, String InLibraryPath_x86, String InLibraryPath_x64, Object[] InPassThruArgs)
at GlobalDragHook.Ui.Form1.InjectIntoExplorer() in C:\Users\meyerdt\Downloads\GlobalDragHook\GlobalDragHook\GlobalDragHook.Ui\Form1.cs:line 79
at GlobalDragHook.Ui.Form1..ctor() in C:\Users\meyerdt\Downloads\GlobalDragHook\GlobalDragHook\GlobalDragHook.Ui\Form1.cs:line 24
at GlobalDragHook.Ui.Program.Main() in C:\Users\meyerdt\Downloads\GlobalDragHook\GlobalDragHook\GlobalDragHook.Ui\Program.cs:line 19

Ich habe schon bei den Issus von EasyHook geschaut, allerdings keine Änderung gefunden die noch nicht ind dem Beispiel Projekt umgesetzt war.

Gruß Thomas

06.11.2018 - 12:25 Uhr

Ich kenne die Regel, nur leider kann ich das nicht anhängen meine Zip wird nicht genommen.
Siehe mein Post.

Wer das Projekt haben möchte soll sich dann bei mir melden.

Form1.cs

using EasyHook;
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using System.Threading;
using System.Windows.Forms;
using IDataObject = System.Runtime.InteropServices.ComTypes.IDataObject;

namespace DoDragDrop
{
    public partial class Form1 : Form, IEntryPoint
    {
        public LocalHook dragDropHook;

        public Form1()
        {
            InitializeComponent();

            panel1.AllowDrop = true;
            label1.Text = "";
            TopMost = true;

            //Maus Hook zumerfassen der linken Maus Taste
            MouseHook.MouseActionLeftDown += MouseHook_MouseActionLeftDown;
            MouseHook.Start();

            //Mit der hWnd des Explorers funktioniert das RegisterDragDrop, aber das Event in der MyDropTarget Klasse wird nicht ausgelöst
            //Explorer Prozess holen
            //Process[] processes = Process.GetProcesses();
            //IntPtr hWnd = this.Handle;
            //foreach (var process in processes)
            //{
            //    if (process.ProcessName.Equals("explorer"))
            //    {
            //        hWnd = process.Handle;
            //    }
            //}

            //Aktuelles Fenster holen
            IntPtr hWnd = this.Handle;

            //Prüfen ob es auch ein Fenster ist
            bool iswindow = IsWindow(hWnd);

            //DragDrop registieren
            HRESULT_TYPEDEF hRESULTRegister = new HRESULT_TYPEDEF(RegisterDragDrop(hWnd, new MyDropTarget()));
            label1.Text += "RegisterDragDrop = " + iswindow + "|" + hRESULTRegister.GetName() + Environment.NewLine;

            //Revoke meldet auch Okay nachdem RegisterDragDrop ausgeführt wurde. Wird erst der Revoke ausgeführt meldet er korrekter Weise, dass noch kein DragDrop registiert ist.
            //HRESULT_TYPEDEF hRESULTRevoke = new HRESULT_TYPEDEF(RevokeDragDrop(hWnd));
            //label1.Text += "RevokeDragDrop = " + iswindow + "|" + hRESULTRevoke.GetName() + Environment.NewLine;


            try
            {
                //DoDragDrop "anmelden"
                dragDropHook = LocalHook.Create(LocalHook.GetProcAddress("Ole32.dll", "DoDragDrop"), new DragDropDelegate(DoDragDropHook), this);

                // Alle Processe "hooken"
                dragDropHook.ThreadACL.SetExclusiveACL(new Int32[] { 0 });
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
            }
        }
                

        private void MouseHook_MouseActionLeftDown(object sender, EventArgs e)
        {
            label1.Text += "Maus links Klick" + Environment.NewLine;
        }

        private void panel1_DragEnter(object sender, DragEventArgs e)
        {
            label1.Text += "Drag Enter - Form 1" + Environment.NewLine;
            e.Effect = DragDropEffects.All;
        }
        private void panel1_DragDrop(object sender, DragEventArgs e)
        {
            label1.Text += "DragDrop - Form 1" + Environment.NewLine;
        }

                   
        //DLL's laden bzw. Verweis erstellen
        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool IsWindow(IntPtr hWnd);

        [DllImport("ole32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
        public static extern int RegisterDragDrop(IntPtr hwnd, IOleDropTarget target);

        [DllImport("ole32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
        public static extern int RevokeDragDrop(IntPtr hwnd);

        [DllImport("Ole32.dll", CharSet = CharSet.Unicode, SetLastError = true, CallingConvention = CallingConvention.StdCall)]
        static extern int DoDragDrop(IDataObject pDataObj, IDropSource pDropSource, uint dwOKEffects, uint[] pdwEffect);

        [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Ansi, SetLastError = true)]
        delegate int DragDropDelegate(IDataObject pDataObj, IDropSource pDropSource, uint dwOKEffects, uint[] pdwEffect);

        [ComImport, Guid("00000121-0000-0000-C000-000000000046"),
        InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        public interface IDropSource
        {
            [PreserveSig]
            uint QueryContinueDrag([MarshalAs(UnmanagedType.Bool)] bool fEscapePressed, uint grfKeyState);

            [PreserveSig]
            uint GiveFeedback(uint dwEffect);
        }


        //DoDragDrop Event
        int DoDragDropHook(IDataObject pDataObj, IDropSource pDropSource, uint dwOKEffects, uint[] pdwEffect)
        {
            //Der BreakPoint wird nie erreicht

            MessageBox.Show("DoDragDropHook");

            //Format abfragen, wenn was kommen würde
            FORMATETC format = new FORMATETC();
            format.cfFormat = (short)DataFormats.GetFormat("FileContents").Id;
            format.dwAspect = DVASPECT.DVASPECT_CONTENT;
            format.lindex = 0;
            format.ptd = new IntPtr(0);
            format.tymed = TYMED.TYMED_HGLOBAL | TYMED.TYMED_ISTREAM | TYMED.TYMED_ISTORAGE;
            STGMEDIUM medium = new STGMEDIUM();
            pDataObj.GetData(ref format, out medium);
            pdwEffect = new uint[] { 0, 0 };
            return 0;
        }
       
    }

    //Interface für die Ereignisse
    [ComImport, Guid("00000122-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IOleDropTarget
    {
        [PreserveSig]
        int OleDragEnter([In, MarshalAs(UnmanagedType.Interface)] object pDataObj, [In, MarshalAs(UnmanagedType.U4)] int grfKeyState, [In, MarshalAs(UnmanagedType.U8)] long pt, [In, Out] ref int pdwEffect);
        [PreserveSig]
        int OleDragOver([In, MarshalAs(UnmanagedType.U4)] int grfKeyState, [In, MarshalAs(UnmanagedType.U8)] long pt, [In, Out] ref int pdwEffect);
        [PreserveSig]
        int OleDragLeave();
        [PreserveSig]
        int OleDrop([In, MarshalAs(UnmanagedType.Interface)] object pDataObj, [In, MarshalAs(UnmanagedType.U4)] int grfKeyState, [In, MarshalAs(UnmanagedType.U8)] long pt, [In, Out] ref int pdwEffect);
    }

    //Klasse die die Ereignisse des Interfaces aussführen sollte
    internal class MyDropTarget : IOleDropTarget
    {

        public int OleDragEnter(object pDataObj, int grfKeyState, long pt, ref int pdwEffect)
        {
            throw new NotImplementedException();
        }

        public int OleDragOver(int grfKeyState, long pt, ref int pdwEffect)
        {
            throw new NotImplementedException();
        }

        public int OleDragLeave()
        {
            throw new NotImplementedException();
        }

        public int OleDrop(object pDataObj, int grfKeyState, long pt, ref int pdwEffect)
        {
            throw new NotImplementedException();
        }
    }

    //Klasse für die Statis des Register und RevokeDragDrop
    public class HRESULT_TYPEDEF
    {
        private int value = 1;
        public HRESULT_TYPEDEF(int value)
        {
            this.value = value;
        }

        public HRESULT_TYPEDEF(string name)
        {
            this.value = GetValue(name);
        }

        public const int DRAGDROP_E_FIRST = -2147221248;
        public const int DRAGDROP_E_NOTREGISTERED = -2147221248;
        public const int DRAGDROP_E_ALREADYREGISTERED = -2147221247;
        public const int DRAGDROP_E_INVALIDHWND = -2147221246;
        public const int DRAGDROP_E_LAST = -2147221233;

        public const int NOERROR = 0;
        public const int S_OK = 0;
        public const int SEC_E_OK = 0;
        public const int S_FALSE = 1;

        public static int GetValue(string name)
        {
            switch (name)
            {
                case "DRAGDROP_E_FIRST":
                    return DRAGDROP_E_FIRST;
                case "DRAGDROP_E_NOTREGISTERED":
                    return DRAGDROP_E_NOTREGISTERED;
                case "DRAGDROP_E_ALREADYREGISTERED":
                    return DRAGDROP_E_ALREADYREGISTERED;
                case "DRAGDROP_E_INVALIDHWND":
                    return DRAGDROP_E_INVALIDHWND;
                case "DRAGDROP_E_LAST":
                    return DRAGDROP_E_LAST;
                case "S_FALSE":
                    return S_FALSE;
                case "S_OK":
                    return S_OK;
                default:
                    return 1;
            }
        }
        public static string GetName(int value)
        {
            switch (value)
            {
                case DRAGDROP_E_NOTREGISTERED:
                    return "DRAGDROP_E_NOTREGISTERED";
                case DRAGDROP_E_ALREADYREGISTERED:
                    return "DRAGDROP_E_ALREADYREGISTERED";
                case DRAGDROP_E_INVALIDHWND:
                    return "DRAGDROP_E_INVALIDHWND";
                case DRAGDROP_E_LAST:
                    return "DRAGDROP_E_LAST";
                case S_OK:
                    return "S_OK";
                case S_FALSE:
                    return "S_FALSE";
                default:
                    return "S_FALSE";
            }
        }

        public int GetValue()
        { return this.value; }

        public string GetName()
        { return GetName(this.value); }
    }

}


06.11.2018 - 12:11 Uhr

Hallo zusammen,

ich habe die letzten Wochen alle Seiten zu Drag & Drop studiert, doch leider immer noch keine Lösung für mein Problem gefunden. Daher wende ich mich nochmal an euch.

Das Registrieren des RegisterDragDrop Verweis funktioniert für den aktuellen Prozess, Wenn ich aber nun das Handle des Explorers nehme, dann wird das Drag Drop Event nicht ausgelöst.

Des Weiteren habe ich es noch über die Nuget von EasyHook versucht, leider auch ohne Erfolg. Das Event wird nie ausgelöst.

Ich habe ein Probeprojekt angehangen.(Anhängen ging nicht. eventuell wegen der Größe? Es sind Fehler beim Hochladen aufgetreten. Bitte überprüfe Deine Eingaben.)
<dropbox link entfernt>

Beschreibung:
Aktuell wird das RegisterDragDrop auf das Handle der aktuellen Form angewendet. Wird nun das Projekt ausgeführt wird auch das Event OleDragEnter in der Klasse MyDropTarget ausgelöst. Allerdings möchte ich dies gerne entweder für alle Prozesse oder mindestens für den Explorer.

Für Dokus oder Denkanstöße bin ich Dankbar

Gruß
Thomas

19.10.2018 - 10:21 Uhr

Hallo,

hier ist auf jedenfall das DataGrid zu verwenden. Mit dem ListView wirst du nicht glücklich werden.

Gruß

11.10.2018 - 11:44 Uhr

Hallo An_Dre,

du hast das falsche Event genommen. Das Event Click enthält keine PaintEventArgs.
Du benötigst das Paint Event, dort sich auch die Painteventargs enthalten.

Gruß
Thomas

19.09.2018 - 07:22 Uhr

Meint er eventuell:


FileInfo fileinfo = new FileInfo(path);
Console.WriteLine(fileinfo.FullName);

03.09.2018 - 09:46 Uhr

Hallo,

@Th69
Danke für Links, Hooks sind mir bekannt und wende ich bereits erfolgreich an. Mein Problem liegt darin, dass ich keinen Hook finde, der das "Drag" angiebt. (Drop gibt es, aber dann ist es für mich schon zu spät.) Da ich schon beim Ziehen der Datei herrausfinden möchte, ob die Datei im "Drag" für das Programm in Frage kommt.
In den Links konnte ich dazu auch nichts finden. Oder habe ich etwas übersehen?

Gruß

03.09.2018 - 06:58 Uhr

Hallo zusammen,

danke für die Antworten.

@Coder007
Kannst du mir einen kleinen Tipp geben mit welcher dll und Funktion ich dies machen muss. Ich habe nichts brauchbares gefunden.

@pinki
Die Funktionen könnte man auch noch einbauen. =)

Gruß

30.08.2018 - 07:03 Uhr

Hallo,

@MarsStein
Das ist eine Anforderung. Das ist natürlich kein großes Fenster, sondern unten rechts am Bildschirmrand und ganz klein (150 x 100) ohne Form Border und Transparent. Es geht darum, dass das Fenster nicht immer manuell geöffnet werden muss.

@Glowhollow
Also das Drag soll in dem kompletten Bildschirmbereich möglich sein, das kann ich nicht Einschränken. Und genau das ist meine Frage.

Wie ich Abfragen kann, was das für ein "gedraggtes" Objekt ist.

Gruß

29.08.2018 - 14:54 Uhr

Hallo zusammen,

ich bin gerade dabei ein Progamm zuschreiben mit Drag ans Drop. Das Windows Forms Programm läuft im Hintergrund (notifyIcon). Wenn nun irgendwo (HookCallback der user32.dll) die Maus länger als 2 Sekunden betätigt wird öffnet sich die Form und der Anwender kann das Objekt in die Form ziehen und dort "droppen".

Das Problem/Störende an dem Programm ist, dass auch bei anderen Maus Aktionen wie z.B. das Scrollen mit der linken Maus Taste oder das markieren eines Textes sich die Form öffnet.

Gibt es eine Möglichkeit zu prüfen, ob die Maus aktuell ein Object/Datei bewegt außerhalb der Form? (Drag)

Gruß
Thomas

29.08.2018 - 06:41 Uhr

Hallo,

eine Lösung habe ich nicht direkt. Aber aus meinen Erfahrungen herraus gibt es viele Programme, die dann 2 Progressbars benutzen. Eine für den Gesamtfortschritt und eine für die aktuelle Datei.

Gruß Thomas

31.07.2018 - 13:23 Uhr

Hallo,

Wie erhälst du das Array denn als string?
Wenn deine angegebenen Variablen ein string ist, dann kannst du dies am besten mit RegEx einlesen.

Arrays sollten nach Möglichkeit vermieden werden. Hier sind Listen besser.

31.07.2018 - 13:17 Uhr

Wie viele Datensätze sind denn in deiner Datenbank?

Ist der Tabellenname korrekt geschrieben?

Stört eine Firewall oder ähnliches eventuell?

18.07.2018 - 06:41 Uhr

Hallo,

die Grundsatzarbeiten wirst du schon selber erledigen müssen. Wir helfen gerne bei Problemen, werden aber nicht dir Code schreiben. Deswegen erstmal überlegen wie sehen die Objekte aus, wie sind die Schnittstellen usw.

Wenn du dann ein explizites Problem hast dann kannst du dich mit deinem vorhanden Code melden. Dann helfen wir gerne.

Gruß
Thomas

11.07.2018 - 06:36 Uhr

Hallo,

du kannst ja einfach beim beschreiben der Tabelle die letzte beschriebene Zelle in einer Variable speichern. (Wenn das nicht das ist, was du meinst, dann wäre ein Stück Code nicht schlecht.)

Gruß Thomas

13.06.2018 - 12:35 Uhr

Weil die Datei bei File.Create noch geöffnet ist. Du kannst die mit File.Close schließen, oder besser ist nich Using verwenden.

13.06.2018 - 08:42 Uhr

Du musst das Hauptelement zu der Liste hinzufügen.

x.Add(x1);

Die Alternative ist eine für x1.CategoryAxis unsw eine eigne Liste machen.

29.05.2018 - 12:38 Uhr

Hallo,

was Abt damit sagen möchte, das deine XML Datei einen Fehler aufweist.

Und die Fehlermeldung sagt ja das in Zeile 2 und Spalte 1 ein "-" steht statt ein "<".

22.05.2018 - 08:42 Uhr

Ich bin mal so frei.

z.B. ein konstruktor in der Chart Klasse:

public Chart(Form1 form1)
{
 this.frm = form1;
}

und dann in Form1

Chart chart = new Chart(this);

Was mir gerade aufgefallen ist, das durch deine Chart Klasse da auch ein zimliches durcheinander herrscht. Besser wäre MyChart oder ähnliches. Des Weiteren hast du einmal chart und chart1.

Also erstmal Code aufräumen.

Gruß

07.05.2018 - 15:15 Uhr

Hallo du könntest mal in dem .csproj File nach

 <TargetFrameworkVersion>v8.0</TargetFrameworkVersion>

suchen.

23.04.2018 - 07:11 Uhr

Bei der foreach Schleife gibt das GetFiles wie du schon sagtes FileInfo zurück. Daher muss du die Foreach umbauen auf FileInfo. Und wenn es die List<PdfDocument> bleiben soll, dann musst du noch das file auf PdfDocument casten/konvertieren.

foreach (FileInfo file in ParentDirectory.GetFiles())
            {
                //Wenn file vom Typ PDF ist dann in die pdfliste einfügen
               if(...)
               {
                    pdfliste.Add(file);
               }
            }

Gruß

19.04.2018 - 15:12 Uhr

Ich bin in WPF nicht drin, aber hier mal ein kleiner Hinweis aus Google:

Canvas.Children.Add(image);

ansonsten einfach mal Googlen nach "wpf Drawing Pixels in WPF".

Gruß

19.04.2018 - 13:28 Uhr

Hallo,

so wie ich es sehe erstellst du das Image "säule" aber gibst es nirgends aus. bzw. Wie sieht denn der XAML Code aus?

Gruß

19.04.2018 - 06:53 Uhr

Hallo,

versuche es mal mit dem Debugger und nicht mit Message Boxen,dann kannst du bei jedem Schritt deine Liste beobachten:
Debugger: Wie verwende ich den von Visual Studio?

Gruß