Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von hypersurf
Thema: Drag & Drop: Listview nach Treeview und TreeNode dabei markieren
Am im Forum: GUI: Windows-Forms

Hallo zusammen,

ich habe in meiner Anwendung die Drag & Drop-Funktionalität von einem ListView in ein TreeView implementiert. D. h. ich kann ListViewItems auf ein TreeNode ziehe und dann wird automatisch unter dem TreeNode ein neuer Node generiert. Soweit so gut.

Um dem Anwender den Drag & Drop-Vorgang zu erleichtern, würde ich gerne den TreeNode über dem sich die Maus beim Drag & Drop-Vorgang gerade befindet markieren.

Das funktioniert leider nicht so einfach wie ich es mir vorgestellt habe, bzw. ich mache irgendwas falsch und finde den Fehler nicht:

      private void tvMain_DragOver(object sender, DragEventArgs e)
      {

         if (e.Data.GetData(typeof(ListViewItem)) != null)
         {
            Point p = new Point(e.X, e.Y);
            tvMain.PointToClient(p);
            TreeNode node = tvMain.GetNodeAt(p);

            if (node != null)
            {
               tvMain.SelectedNode = node;
            }
         }
      }


Auch wenn "node" nicht null ist funktioniert das setzen des SelectedNode's nicht: Der Node wird nicht blau markiert.


Hat jemand eine Idee, woran das liegen könnte?


Danke & Gruß

Markus

Thema: C# DLL für VB6 schreiben
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Nicht automatisch generieren lassen heisst nicht über "GUID erstellen"? Wie soll ich die GUID dann erstellen?

Thema: C# DLL für VB6 schreiben
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Visual Studio 6 läuft auf einem anderen rechner, als das .NET-Studio.

Die beiden Dateien (die DLL und die TLB) werden im Moment immer Testweise auf den VB6-Rechner kopiert und dort registriert.

Das mit dem Verweis rausnehmen habe ich ausprobiert, nützt leider nichts

Thema: C# DLL für VB6 schreiben
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat von kleines_eichhoernchen
Das Intellisense von VB6 die Funktionen nicht anzeigt, liegt daran, dass VB6 nicht jede COM-Bibliothek (in dem Fall eine DOT NET Assembly) lesen kann. Da es das Problem in mehreren IDEs gibt, gibt es die Möglichkeit, alle COM-Klassen sowie Interfaces mit dem jeweiligen Funktionen als eine Typbibliothek (Endung .tlb) zu exportieren. Dort enthalten sind dann jeweils die entsprechenden Verweise zu den einzelnen Funktionen der Bibliothek. In deiner IDE bindest du statt die COM-Bibliothek anschließend die TLB ein.

Das man eine DispID in DOT NET angeben muss, ist mir auch neu. Normal weißt die CLR eine entsprechende ID jedem öffentlichen Member zu.

Die TBL-Datei habe ich bereits eingebunden. Als es das erste Mal funktioniert hat, hat VB mir auch alles wunderbar angezeigt. Als ich dann eine weitere Funktion hinzugefügt hab, wurden mir in VB keine Funktionen mehr angezeigt. Komischerweise sehe ich im Objektkatalog in VB meine beiden Funktionen als Events.


Gehe ich beim Erstellen der TBL-Datei denn richtig vor?

tlbexp VBtestProjekt.dll /out:VBtestProjekt.tlb
regasm VBtestProjekt.dll /tlb:VBtestProjekt.tlb
gacutil /i VBtestProjekt.dll


Die letzten beiden Schritte wiederhole ich auf dem Client-PC wo VB6 installiert ist.

Thema: C# DLL für VB6 schreiben
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

So funktioniert es jetzt:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;


namespace ClassLibrary1
{
    [Guid("E0BEF3E9-8297-4a69-BEC3-662451A620C2"),
     InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IVBTest
    {
        [DispId(1)] string testfunktion(string test);
        [DispId(2)] int testfunktion2(int a, int b);
    }


    [Guid("8ABEFB55-19FA-4902-A9BF-834378F6AD75"),
     ClassInterface(ClassInterfaceType.AutoDispatch),
     ComSourceInterfaces(typeof(IVBTest))]
    public class VBTest : IVBTest
    {
        public VBTest()
        {

        }

        public string testfunktion(string test)
        {
            return test;
        }

        public int testfunktion2(int a, int b)
        {
            return a + b;
        }

    }
} 


Sehr komisch ist aber, dass die IntelliSense von VB die beiden Funktion nicht anzeigt, die Funktionen aber aufgerufen werden können und auch funktionieren.

Thema: C# DLL für VB6 schreiben
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo Norman-Timo,

die Threads habe ich bereits mehrfach gelesen (bzw. mittlerweile könnte man auch studiert sagen).

Ich habe zwei Probleme:

1.) Ich kann die Klasse VBTest in VB6 nicht instanzieren (Laufzeitfehler 429)
2.) Die Klasse VBTest beinhaltet im VB6-Objektkatalog nicht die Funktion "testfunktion". Diese wird mir in VB6 als Teil der Interfaceklasse angezeigt. Meiner Meinung nach dürfte die Interfaceklasse in VB6 gar nicht auftauchen.


Gruß Markus

Thema: C# DLL für VB6 schreiben
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hi,

ich möchte gerne eine C#-DLL schreiben, die ich dann in VB einbinden kann.
Das Erstellen der Typelib funktioniert problemlos, und diese lässt sich auch in VB einbinden.

Allerdings wird mir meine Testmethode in VB in der Interface-Klasse IVBTest angezeigt, statt in der richtigen Klasse VBTest.
Instanzieren lässt sich die VBTest-Klasse auch nicht (Laufzeitfehler 429).

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace ClassLibrary1
{
    [Guid("E0BEF3E9-8297-4a69-BEC3-662451A620C2")]
    public interface IVBTest
    {
        string testfunktion(string test);
    }


    [Guid("8ABEFB55-19FA-4902-A9BF-834378F6AD75"),
     ClassInterface(ClassInterfaceType.None),
     ComSourceInterfaces(typeof(IVBTest))]
    public class VBTest : IVBTest
    {
        public VBTest()
        {

        }

        public string testfunktion(string test)
        {
            return test;
        }

    }
}

VB6 läuft auf einem anderen Rechner als die .NET-Entwicklungsumgebung.


Hat jemand eine Idee, was ich falsch mache?


Danke und Gruß

Markus