C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: RaiseEvent


(過去ログ 120 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■72069 / inTopicNo.1)  RaiseEvent
  
□投稿者/ iyone718 (1回)-(2014/05/14(Wed) 22:59:57)

分類:[VB.NET/VB2005 以降] 

下記の様なC#のソースをVBに変換したら、(AAAA 部)で

エラー	2	'Public Event CurrentChanged(sender As Object, e As Autodesk.Windows.RibbonPropertyChangedEventArgs)' はイベントであるため、直接呼び出すことはできません。イベントを発生させるには 'RaiseEvent' ステートメントを使用してください。

というエラーメッセージが出て、変換出来ません。

'RaiseEvent'について,当サイト、その他を調べましたが、理解出来ません。
可能なら、どの様に変換するれば良いか、教えて頂けないでしょうか?


環境は、下記の通りです。
	Windows 8.1	64Bit
	Microsoft Visual Studio 2010
	Visual Basic クラスライブラリー


'*************************************************************************************

    //----------------- 元のC#ソース----------------------------------------------
    public void createLUNITSRibbonCombo()
    {
        RibbonControl ribCntrl
              = RibbonServices.RibbonPaletteSet.RibbonControl;

        RibbonTab ribTab = new RibbonTab();
        ribTab.Title = "My custom tab";
        ribTab.Name = "MyTab";
        ribTab.Id = "MY_TAB_ID";
        ribCntrl.Tabs.Add(ribTab);

        RibbonPanelSource ribSourcePanel = new RibbonPanelSource();
        ribSourcePanel.Title = "MyPanel1";
        RibbonPanel ribPanel = new RibbonPanel();
        ribPanel.Source = ribSourcePanel;
        ribTab.Panels.Add(ribPanel);

        RibbonCombo lunitsRibbonCombo = new RibbonCombo();
        lunitsRibbonCombo.Name = "LUNITSCombo";
        lunitsRibbonCombo.Id = "AdskLUNITSCombo";
        System.Windows.Data.Binding bind1
                           = new System.Windows.Data.Binding();
        bind1.Source = lunitValues;
        lunitsRibbonCombo.ShowText = true;
        lunitsRibbonCombo.Size = RibbonItemSize.Large;
        lunitsRibbonCombo.ShowImage = false;
        lunitsRibbonCombo.ItemsSourceBinding = bind1;

        System.Windows.Data.Binding bind2
                           = new System.Windows.Data.Binding();
        bind2.Path = new System.Windows.PropertyPath(".");
        lunitsRibbonCombo.ItemTemplateTextBinding = bind2;

        // Set its intial value
        Int16 index = (Int16)
        //Application.UIBindings.SystemVariables["LUNITS"].Value;
        acadApp.UIBindings.SystemVariables["LUNITS"].Value;

        lunitsRibbonCombo.Current = lunitValues[index];

        lunitsRibbonCombo.CurrentChanged
            += new EventHandler<RibbonPropertyChangedEventArgs>
                                    (ribCombo_CurrentChanged);

        ribSourcePanel.Items.Add(lunitsRibbonCombo);

        ribTab.IsActive = true;
    }


    // Callback to track changes to LUNIT made using the combobox
    // Update the system variable based on the changes
    void ribCombo_CurrentChanged(object sender,RibbonPropertyChangedEventArgs e)
    {
        //ILookup<SystemVariable> sysvars = Application.UIBindings.SystemVariables;
        ILookup<SystemVariable> sysvars = acadApp.UIBindings.SystemVariables;
        SystemVariable sv = sysvars["LUNITS"];
        String newValue = e.NewValue.ToString();
        int lunits = 1;

        // Set the system variable based on the combobox new value
        if (int.TryParse(newValue[0].ToString(), out lunits))
        {
            if (!lunits.ToString().Equals(
                acadApp.UIBindings.SystemVariables["LUNITS"]
                                            .Value.ToString()))
            {
                acadApp.UIBindings.SystemVariables["LUNITS"]
                                               .Value = lunits;
            }
        }
    }
    //----------------------------------------------------------------------------


    '*************************************************************************************
    '----------------- VBに変換されたソース---------------------------------------
    Public Sub createLUNITSRibbonCombo()
        Dim ribCntrl As RibbonControl = RibbonServices.RibbonPaletteSet.RibbonControl
        Dim ribTab As New RibbonTab()
        ribTab.Title = "My custom tab"
        ribTab.Name = "MyTab"
        ribTab.Id = "MY_TAB_ID"
        ribCntrl.Tabs.Add(ribTab)

        Dim ribSourcePanel As New RibbonPanelSource()
        ribSourcePanel.Title = "MyPanel1"
        Dim ribPanel As New RibbonPanel()
        ribPanel.Source = ribSourcePanel
        ribTab.Panels.Add(ribPanel)

        Dim lunitsRibbonCombo As New RibbonCombo()
        lunitsRibbonCombo.Name = "LUNITSCombo"
        lunitsRibbonCombo.Id = "AdskLUNITSCombo"
        Dim bind1 As New System.Windows.Data.Binding()
        bind1.Source = lunitValues
        lunitsRibbonCombo.ShowText = True
        lunitsRibbonCombo.Size = RibbonItemSize.Large
        lunitsRibbonCombo.ShowImage = False
        lunitsRibbonCombo.ItemsSourceBinding = bind1

        Dim bind2 As New System.Windows.Data.Binding()
        bind2.Path = New System.Windows.PropertyPath(".")
        lunitsRibbonCombo.ItemTemplateTextBinding = bind2

        ' Set its intial value
        'Application.UIBindings.SystemVariables["LUNITS"].Value;
        Dim index As Int16 = CType(acadApp.UIBindings.SystemVariables("LUNITS").Value, Int16)

        lunitsRibbonCombo.Current = lunitValues(index)

	'--------------------------AAAA 部---------------------------------
	' 下行でエラーが出る????
        lunitsRibbonCombo.CurrentChanged += New EventHandler(Of RibbonPropertyChangedEventArgs)(AddressOf ribCombo_CurrentChanged)
	'-----------------------------------------------------------------

        ribSourcePanel.Items.Add(lunitsRibbonCombo)

        ribTab.IsActive = True
    End Sub


    Private Sub ribCombo_CurrentChanged(ByVal sender As Object, ByVal e As RibbonPropertyChangedEventArgs)
        'ILookup<SystemVariable> sysvars = Application.UIBindings.SystemVariables;
        Dim sysvars As ILookup(Of SystemVariable) = acadApp.UIBindings.SystemVariables
        Dim sv As SystemVariable = sysvars("LUNITS")
        Dim newValue As [String] = e.NewValue.ToString()
        Dim lunits As Integer = 1

        ' Set the system variable based on the combobox new value
        If Integer.TryParse(newValue(0).ToString(), lunits) Then
            If Not lunits.ToString().Equals(acadApp.UIBindings.SystemVariables("LUNITS").Value.ToString()) Then
                acadApp.UIBindings.SystemVariables("LUNITS").Value = lunits
            End If
        End If
    End Sub
    '----------------------------------------------------------------------------

                                                         (以上)

引用返信 編集キー/
■72070 / inTopicNo.2)  Re[1]: RaiseEvent
□投稿者/ WebSurfer (256回)-(2014/05/14(Wed) 23:15:10)
No72069 (iyone718 さん) に返信

> というエラーメッセージが出て、変換出来ません。

変換できないのではなくて、以下のような変換サービスを利用して C# から VB.NET に変換した
コードをコンパイルしようとしたら、コンパイルエラーが出たと言ってます?

Convert C# to VB.NET
http://www.developerfusion.com/tools/convert/csharp-to-vb/?batchId=fb9b78b1-1308-4b37-838b-bd6529f4321d

引用返信 編集キー/
■72071 / inTopicNo.3)  Re[2]: RaiseEvent
□投稿者/ WebSurfer (257回)-(2014/05/14(Wed) 23:33:22)
No72069 (iyone718 さん) に返信

【追伸】

ここ ↓ を見て C# と VB.NET のコードを見比べてみたら自己解決できませんか?

EventHandler(Of TEventArgs) デリゲート
http://msdn.microsoft.com/ja-jp/library/vstudio/db0etb8x(v=vs.100).aspx

引用返信 編集キー/
■72072 / inTopicNo.4)  Re[3]: RaiseEvent
□投稿者/ iyone718 (2回)-(2014/05/14(Wed) 23:56:12)
No72071 (WebSurfer さん) に返信
> ■No72069 (iyone718 さん) に返信
>
> 【追伸】
>
> ここ ↓ を見て C# と VB.NET のコードを見比べてみたら自己解決できませんか?
>
> EventHandler(Of TEventArgs) デリゲート
> http://msdn.microsoft.com/ja-jp/library/vstudio/db0etb8x(v=vs.100).aspx
>

済みません、おっしゃる通り、ネットの変換サイトで変換したものです。
正確に表現せず、申し訳ありませんでした。

私の場合機械屋で、プログラム作りが仕事ではなく、自社に相談出来る人もいない状況です。その様な状況で、自社のAutoCADのカスタマイズをやっていています。問題の箇所で4〜5日先に進めなくて、万策尽きて、この様な形で質問させて頂きました。

お忙しい中、ご返事頂き、有難う御座います。
頂いた参考サイトを、今から調べて見ます。

引用返信 編集キー/
■72077 / inTopicNo.5)  Re[4]: RaiseEvent
□投稿者/ みやね (1回)-(2014/05/15(Thu) 14:59:44)
イベントハンドラの追加方法は、C#とVBとで異なります。
エラーの部分は、

AddHandler lunitsRibbonCombo.CurrentChanged, AddressOf ribCombo_CurrentChanged

とすればいいのではないでしょうか?

引用返信 編集キー/
■72078 / inTopicNo.6)  Re[5]: RaiseEvent
□投稿者/ iyone718 (3回)-(2014/05/15(Thu) 15:56:04)
No72077 (みやね さん) に返信
> イベントハンドラの追加方法は、C#とVBとで異なります。
> エラーの部分は、
>
> AddHandler lunitsRibbonCombo.CurrentChanged, AddressOf ribCombo_CurrentChanged
>
> とすればいいのではないでしょうか?
>

みやね さん、WebSurferさん、お忙しい中、教えて頂きましてありがとう御座いました。

私も、今朝テストをして、上記の形でエラーが出ない事を確認しましたが、イベントハンドラの仕組みが良く分からなかったので、色々調べていた所でした。

今回は、エラーに「 'RaiseEvent' ステートメントを使用してください」とあったので、何処かで、'RaiseEvent'を使用しなければいけないものと考えてしまった事に、深みにはまってしった原因がある様です。(勿論、イベントハンドラの仕組みを全く理解していなかったのが最大の原因ですが!)でも、お陰で、イベントハンドラの仕組みを、少し、勉強出来きたので、大変良い勉強になりました!

お二人とも有難うございました!
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -