Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Selectionchange Ereignis

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Selectionchange Ereignis (1715 mal gelesen)
Boehri
Mitglied



Sehen Sie sich das Profil von Boehri an!   Senden Sie eine Private Message an Boehri  Schreiben Sie einen Gästebucheintrag für Boehri

Beiträge: 80
Registriert: 07.04.2008

erstellt am: 07. Jan. 2011 14:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Zusammen,

ich weiss nicht ob dies hier das richtige Forum für meine Frage ist.
Ich versuche es trotzdem einmal.

Ich habe in VB.net ein kleines Tool geschrieben mit dem eine Autocad -Zeichnung überprüft wird. das Ganze wird dan in einer Excel-Tabelle ausgegeben. Das funktioniert auch eigentlich soweit.
Nun möchte ich, wenn ich eine Zelle in der Excel-Tabelle anklicke, ein Ereignis auslösen um wieder in Autocad etwas auszuführen.
mein Code sieht folgendermaßen aus.

Code:
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.Colors
Imports System.Data.OleDb
Imports Microsoft.Office.Interop

Code:
Public Class Class1
    Dim strFilename As String = "C:\ProgramData\zvwin\acad\v2010\zvw\ing\vorlagen\Linientypkonvertierung.accdb"
    Public conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source= " & strFilename & ";")
    Public daLinientypkonvertierung As New OleDbDataAdapter("SELECT * FROM Komplex_2_Iso", conn)
    Public ds As New DataSet
    Private dt As New DataTable
    Dim xls_Appl As Excel.Application              ' Excel Anwendung
    Dim xls_Mappe As Excel.Workbook                ' Excel Arbeitsmappe
    Private WithEvents xls_Blatt As New Excel.Worksheet          ' Excel Blatt (Tabelle)
    Private WithEvents xls_Blatt1 As New Excel.Worksheet

Code:
    <CommandMethod("checkdwg")> _
Public Sub Check_Zeichnung()
        '' Get the current document and database, and start a transaction
        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
        Dim acCurDb As Database = acDoc.Database

        xls_Appl = New Excel.Application()              ' Excel Instanz bilden
        xls_Mappe = xls_Appl.Workbooks.Open("C:\ProgramData\zvwin\acad\v2010\zvw\ing\vorlagen\Vorlage_Zeichnungsprüfung.xls")
        xls_Blatt = xls_Mappe.Worksheets("Layer_0")
        xls_Blatt1 = xls_Mappe.Worksheets("VonLayer")


        Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()

            Try

                '' Open the Block table record for read
                Dim acBlkTbl As BlockTable
                acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, _
                                            OpenMode.ForRead)

                '' Open the Block table record Model space for read
                Dim acBlkTblRec As BlockTableRecord
                acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _
                                                OpenMode.ForRead)


                acDoc.Editor.WriteMessage(vbLf & "Model space objects: ")

                '' Step through each object in Model space and
                '' display the type of object found

                Dim nCnt As Integer = 0
                Dim nCnt1 As Integer = 0

                For Each acObjId As ObjectId In acBlkTblRec
                    If acBlkTblRec.XrefStatus = XrefStatus.NotAnXref Then
                        If (acObjId.IsValid) AndAlso (Not acObjId.IsErased) Then
                            Dim ent As Entity = CType(acTrans.GetObject(acObjId, OpenMode.ForRead), Entity)

                            If ent.Layer = "0" Then
                                acDoc.Editor.WriteMessage(vbLf + "Type:        " & Split(ent.GetType.ToString, "Autodesk.AutoCAD.DatabaseServices.")(1) & " auf Layer 0")
                                xls_Blatt.Cells(nCnt + 4, 1).Value = Split(ent.GetType.ToString, "Autodesk.AutoCAD.DatabaseServices.")(1)

                                acDoc.Editor.WriteMessage(vbLf + "Koordinaten:        " & ent.GeometricExtents.MinPoint.ToString)
                                xls_Blatt.Cells(nCnt + 4, 2).Value = ent.GeometricExtents.MinPoint.ToString
                                nCnt = nCnt + 1

                            End If
                            If Not ent.Color.ToString Like "VON*" Then
                                acDoc.Editor.WriteMessage(vbLf + "Type:        " & Split(ent.GetType.ToString, "Autodesk.AutoCAD.DatabaseServices.")(1) & " auf Layer 0")
                                xls_Blatt1.Cells(nCnt1 + 4, 1).Value = Split(ent.GetType.ToString, "Autodesk.AutoCAD.DatabaseServices.")(1)
                                acDoc.Editor.WriteMessage(vbLf + "Koordinaten:        " & ent.Color.ToString)
                                xls_Blatt1.Cells(nCnt1 + 4, 2).Value = ent.GeometricExtents.MinPoint.ToString
                                acDoc.Editor.WriteMessage(vbLf + "Farbe:        " & ent.Color.ToString)
                                xls_Blatt1.Cells(nCnt1 + 4, 3).Value = ent.Color.ToString

                                nCnt1 = nCnt1 + 1
                            End If

                        End If

                    End If
                Next

                acDoc.Editor.WriteMessage(vbLf & nCnt1 & "  Objekte gefunden")
                acDoc.Editor.WriteMessage(vbLf & nCnt & "  Objekte geändert")

                'Falls keine Objekte gefunden
                If nCnt = 0 Then
                    acDoc.Editor.WriteMessage(vbLf & "  Keine Objekte gefunden")
                Else
                    acTrans.Commit()  'commit TransAction
                End If

                'Zeichnung Regenerieren
                acDoc.SendStringToExecute("._REGEN ", True, False, False)


                'Excel-Datei speichern und evtl vorh. Datei überschreiben
                Dim sUser As String = My.User.Name
                Dim path As String = System.Environment.GetEnvironmentVariable("USERPROFILE")
                xls_Appl.DisplayAlerts = False

                Dim strTeile() As String
                Dim strDateiNameGanz As String = acDoc.Name.ToString
                strTeile = strDateiNameGanz.Split("\")


                Dim filename As String = path & "\" & Split(strTeile(strTeile.Length - 1), ".dwg")(0) & "_Prüfung.xls"

                xls_Appl.Visible = True
                xls_Mappe.SaveAs(filename)

                xls_Appl.DisplayAlerts = True
                xls_Appl.Quit()
                killExcelInstanceById(xls_Appl)

                xls_Appl = Nothing
                xls_Blatt = Nothing
                xls_Mappe = Nothing

                'Abfrage ob die Datei geöffnet werden soll
                Dim antwort As String = MsgBox("Die Datei wurde unter" & vbLf & filename & vbLf & _
                                                "gespeichert" & vbLf & vbLf & _
                                                "Soll die Datei geöffnet werden?", MsgBoxStyle.YesNo)
                If antwort = vbYes Then
                    'Excel-Datei öffnen
                    Process.Start(filename)
                Else
                End If


            Catch ex As Autodesk.AutoCAD.Runtime.Exception

                acDoc.Editor.WriteMessage(ex.Message)
            End Try
        End Using


    End Sub


Ich habe versucht mit dem SelectionChange-Ereignis zu reagieren, aber da tut sich nix.

Code:
  Private Sub xls_Blatt_SelectionChange(ByVal Target As Excel.Range)
        ...mach irgendwas 
End Sub

Was muss ich machen damit mein Programm auf das Ereignis reagiert?
Vielen Dank im Vorraus.


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 07. Jan. 2011 16:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

ich habe jetzt mal Deinen Code durchgeguckt, mit folgendem Rückschluss:

Wenn Du die Sub  Check_Zeichnung  startest (unter der Voraussetzung, dass ich es richtig lese und interpretiere ), dann startest Du Excel, befüllst 2 Worksheets mit Elementen aus der Zeichnung und dann schiesst Du mit  killExcelInstanceById(xls_Appl)  Dein Excel wieder ab.

Nun stellt sich die Frage für mich (Unwissenden): wie soll in Excel eine Selektionsänderung einen Event auslösen, wenn Du Excel abgeschossen hast? Oder was verstehe ich falsch an der ganzen Thematik?

- alfred -

------------------
www.hollaus.at

Boehri
Mitglied



Sehen Sie sich das Profil von Boehri an!   Senden Sie eine Private Message an Boehri  Schreiben Sie einen Gästebucheintrag für Boehri

Beiträge: 80
Registriert: 07.04.2008

erstellt am: 10. Jan. 2011 07:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Alfred,

danke für deine Antwort. Ich würde natürlich bevor ich Excel schließe eine Abfrage einbauen.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Boehri
Mitglied



Sehen Sie sich das Profil von Boehri an!   Senden Sie eine Private Message an Boehri  Schreiben Sie einen Gästebucheintrag für Boehri

Beiträge: 80
Registriert: 07.04.2008

erstellt am: 10. Jan. 2011 07:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Alfred,

kleiner Nachtrag.
Ich will mit dem SelectionChange Ereignis zu den einzelen Objekten zoomen.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Boehri
Mitglied



Sehen Sie sich das Profil von Boehri an!   Senden Sie eine Private Message an Boehri  Schreiben Sie einen Gästebucheintrag für Boehri

Beiträge: 80
Registriert: 07.04.2008

erstellt am: 12. Jan. 2011 08:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo nochmal,

ich habe es über eine Form mit einem Datagridview gelöst und von dort über das Cell-Klick-Ereignis die jeweilige Zeile des Datagridview ausgewertet.

Code:

    Public Sub DGV_VonLayer_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGV_VonLayer.CellClick
        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
        Dim sTemp As String = DGV_VonLayer.CurrentRow.Cells(1).Value.ToString()
        Dim dblx As Double = Split(sTemp, ",")(0)
        Dim dbly As Double = Split(sTemp, ",")(1)
        Dim dblz As Double = Split(sTemp, ",")(2)
        Dim pMin As Point3d = New Point3d(dblx - txbGrenzen.Text, dbly - txbGrenzen.Text, 0)
        Dim pMax As Point3d = New Point3d(dblx + txbGrenzen.Text, dbly + txbGrenzen.Text, 0)

        If sTemp.Length - 1 <> 0 Then

            Zoom(pMin, pMax, New Point3d(), 1)

        End If
    End Sub


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz