This project has moved and is read-only. For the latest updates, please go here.

EnableMessageFilter

Jul 27, 2013 at 10:34 AM
Tutorial10 (Baisc und C#) haben den Fehler:
"EnableMessageFilter" ist kein Member von "NetOffice.Setting".

Was ist hier passiert?

Gruß,
Haro
Jul 27, 2013 at 1:42 PM
Ach herjee, da habe ich vergessen den Tutorial Code anzupassen.
Am Anfang bot NetOffice nur einen sehr einfachen MessageFilter den man eben an oder ausschalten konnte.
Inzwischen jedoch haben die Settings ein eigenes MessageFilter Objekt:

http://netoffice.codeplex.com/wikipage?title=Settings.MessageFilter_DE

Danke für den Hinweis, ich passe das noch heute Abend an.
Sebastian
Jul 27, 2013 at 4:11 PM
Hallo Sebastian,

ich hoffe ich darf Dich dutzen.

Dein Werkzeug habe ich mir heute das erste mal angesehen und probiere alle Tutorials und die für mich wichtigen Beispiele aus.
Ich wäre stolz wenn ich so toll programmieren könnte wie Du, also Hut ab. Danke für Deine Leistung und dafür, dass dieses Werk zur freien Verfügung steht.

In C# ist man ja von vornherein nicht in der Lage so einen Ranz zu schreiben wie in Visual Basic, das liegt sicher am VB6 Namespace und auch daran, dass "Option Strikt" nicht automatisch "On" ist.
Deshalb ist auch in Deinen Beispielen und Tutorials einiges drinnen, was in manchen Foren als "böser Code" bezeichnet wird.

Ich selbst bemühe mich seither meinen Code ohne den VB6 kompatiblen Kram zu schreiben und habe daher immer "Option Strict" auf "On" D.h. auch spätes Binden ist in meinem Code untersagt.
Den Namespace "Microsoft.VisualBasic" habe ich entfernt (Haken raus) um den alten VB6 Ranz loszuwerden.

Der Code ist relativ schnell überarbeitet, die Typwandlungen müssen halt Typsicher formuliert werden, ich habe die Tutorials und die Excel Beispiele überarbeitet und das sind die meisten notwendigen Änderungen an Deinem Code:

alt: Dim workSheet As Excel.Worksheet = workBook.Worksheets(1)
neu: Dim workSheet As Excel.Worksheet = CType(workBook.Worksheets(1), Excel.Worksheet)

alt: IIf(_hostApplication.LCID = 1033, "Background Colors and Borders for Cells", "Hintergrundfarben und Rahmen in Zellen")
neu: If(_hostApplication.LCID = 1033, "Background Colors and Borders for Cells", "Hintergrundfarben und Rahmen in Zellen")

alt: Dim decimalValue As Decimal = 7251231.313367
neu: Dim decimalValue As Decimal = CType(7251231.313367, Decimal)

alt: Dim dataRange As Excel.Range = PutSampleData(workSheet)
neu: Dim dataRange As Excel.Range = CType(PutSampleData(workSheet), Excel.Range)

alt: Dim chartObjects As Excel.ChartObjects = workSheet.ChartObjects()
neu: Dim chartObjects As Excel.ChartObjects = CType(workSheet.ChartObjects(), Excel.ChartObjects)

alt: commandBarBtn = commandBarPopup.Controls.Add(MsoControlType.msoControlButton)
neu: commandBarBtn = CType(commandBarPopup.Controls.Add(MsoControlType.msoControlButton), Office.CommandBarButton)

alt: commandBarPopup = commandBar.Controls.Add(MsoControlType.msoControlPopup, System.Type.Missing, System.Type.Missing, System.Type.Missing, True)
neu: commandBarPopup = CType(commandBar.Controls.Add(MsoControlType.msoControlPopup, System.Type.Missing, System.Type.Missing, System.Type.Missing, True), Office.CommandBarPopup)

alt: If (TypeName(itemControl) = "RadioButton") Then
neu: If itemControl.GetType Is GetType(RadioButton) Then

alt: Dim radioSelectButton As RadioButton = itemControl
neu: Dim radioSelectButton As RadioButton = CType(itemControl, RadioButton)

alt: If (Not IsNothing(workbookFile) And Not isFailed) Then
neu: If workbookFile IsNot Nothing AndAlso Not isFailed Then

alt: vbNewLine
neu: Environment.NewLine

Danke nochmals für Deine klasse Arbeit und ein schönes Wochenende,
Hans-Robert

Am 27.07.2013 14:42, schrieb SebastianDotNet:

From: SebastianDotNet

Ach herjee, da habe ich vergessen den Tutorial Code anzupassen.
Am Anfang bot NetOffice nur einen sehr einfachen MessageFilter den man eben an oder ausschalten konnte.
Inzwischen jedoch haben die Settings ein eigenes MessageFilter Objekt:

http://netoffice.codeplex.com/wikipage?title=Settings.MessageFilter_DE

Danke für den Hinweis, ich passe das noch heute Abend an.
Sebastian

Jul 28, 2013 at 4:21 AM
Hallo,
Klar können wir uns dutzen. Ich bin nicht so ein VB.NET Freak daher ist da vielleicht noch nicht alles optimal. Wenn du willst kannst NetOffice Team Member werden und das direkt anpassen. Bei meinen Tests hatte ich mal festgestellt einige elementare Features für VB doch in Microsoft.VisualBasic beheimatet sind. Ich weiss nicht mehr was aber ich glaube eine Prüfung auf null bzw. IsNothing hat ohne diesen Namespace nicht funktioniert. Daher habe ich in der NetOffice.dll eine statische Utils Klasse bereitgestellt die unter anderem public static bool IsNothing(object value)
anbietet sowie ein Helferchen für Enumeratoren die VB.Net so bis heute nicht beherrscht.

Sebastian
Jul 28, 2013 at 7:43 AM
Hallo Sebastian,

es gibt weniges aus dem alten VB6 Namensraum, dass MS sogar selbst noch verwendet. Dazu sollte man sich immer mal die automatisch erzeugten "deineForm.Designer.vb" anschauen.
Alle Beispiele hier sind von Dir und Original, ich habe da nichts verändert:

Sieh Dir z.B. mal aus den Excel-Beispielen die Example06.Designer.vb an:
'UserControl überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
    Try
        If disposing AndAlso components IsNot Nothing Then
            components.Dispose()
        End If
    Finally
        MyBase.Dispose(disposing)
    End Try
End Sub
Microsoft schreibt schon selbst die korrekte Verwendung von "ist nicht nichts" rein.

"IsNothing" ist VB6 Code, den es so auch nicht mehr gibt, deswegen wird ja auch aus
(alt): If (Not IsNothing(workbookFile) ...
(neu): If workbookFile IsNot Nothing ...

Was die von Dir beschriebene Funktion IsNothing soll weiß ich nicht, wozu benötigt man das?
If NetOffice.Utils.IsNothing(excelApplication) Then ...

Da schreibe ich doch lieber:
If excelApplication Is Nothing Then ...

Vielleicht habe ich die Funktion aber auch nur völlig falsch verstanden!?

Gruß,
Robert (Haro)
Jul 28, 2013 at 8:01 AM
Das is wohl so ziemlich das gleiche, wie gesagt ich kenn nur das alte VB6 noch aus der Erinnerung aber hab mit VB.NET bisher nur selten zu tun gehabt. Wenn ich dich richtig verstanden habe hat Microsoft in die Microsoft.Visual DLL alle Kompatibilitäts Features zum alten VB reingepackt damit Umsteiger es etwas leichter haben, man die Sprache aber nicht von vorne herein aufbläht. Wusste ich noch nicht :)

Sebastian
Jul 28, 2013 at 8:31 AM
Korrekt :)

Es gibt aber nicht für alle Funktionen in Visual Baisc Dot.NET eine vergleichbare Funktion, manche muss man sich einfach selbst schreiben, so wie z.B. für die VB6 Funktion "IsNumeric".
Für ein paar Funktionen gibt es nicht mal vernünftigen Ersatz und Microsoft behilft sich damit selbst Funktionen aus der VB6-Trickkiste einzubauen.

Siehe Dein Excel-Beispiel 8 (Example08.Designer.vb):
    Me.textBoxDescription.Text = "This example contains code to catch events in excel." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "example 9 shows you how to " & _
        "catch click events from excel gui." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10)
Da hätten sie lieber ein paar Funktionen aus C# nach Visual Basic Dot.NET übernehmen sollen, hier die selbe Zeile aus der
Example08.Designer.cs:
        this.textBoxDescription.Text = "This example contains code to catch events in excel.\r\nexample 9 shows you how to " +
            "catch click events from excel gui.\r\n";
Robert