0

HideColumns という DataGridView の拡張メソッドを作成しました。

public static class Extensions
{
    public static void HideColumns(this DataGridView dataGridView, params string[] columnNames)
    {
        foreach (string str in columnNames)
        {
            if (dataGridView.Columns[str] != null)
            {
                dataGridView.Columns[str].Visible = false;
            }
        }
    }

}

グリッドを main_grid という変数として IronRuby スクリプトに渡します。

私のスクリプトが main_grid.HideColumns("FirstName","LastName") を呼び出すと、スクリプトは Error in Script undefined method 'HideColumns' for System.Windows.Forms.DataGridView:System::Windows::Forms::DataGridView で失敗します。

拡張メソッドは C# から問題なく動作するようです。何を与える?

4

3 に答える 3

2

FWIW、IronRuby 1.1(.net 4が必要)はusing_clr_extensionsメソッドを提供します-リリースノートに記載されているように、これは、定義されているアセンブリに関係なく、特定の名前空間で定義されたクラスで定義されたすべての拡張メソッドをアクティブにします。アクティブ化された名前空間で拡張メソッドを定義する将来読み込まれるアセンブリは、次のように正しい型に自動的に表示されます。

load_assembly "System.Core"
using_clr_extensions System::Linq

# ...

products.
  where(lambda { |p| p.units_in_stock == 0 }).
  each { |x| puts x.product_name }

リリース ノートは、 http: //github.com/ironruby/ironruby/blob/master/Languages/Ruby/Samples/Linq/101samples.rbにある一連の例も示しています。

于 2011-04-06T20:53:38.663 に答える
1

拡張メソッドは単なるシンタックス シュガーです。次のように呼び出す必要があります。

Extensions.HideColumns(main_grid, "FirstName", "LastName")

または、DataGridView から派生する C# で新しいクラスを作成し、メソッドを追加します。

public class DataGridViewExt : DataGridView  
{
    public void HideColumns(params string[] columnNames)
    {
        foreach (string str in columnNames)
        {
            if (this.Columns[str] != null)
            {
                this.Columns[str].Visible = false;
            }
        }
    }        
}

フォームで System.Windows.Forms クラスではなく、このクラスを使用します。

于 2009-09-23T14:07:51.803 に答える
0

JDunkerylyの回答へのコメントで言及したので、ルビー側からグリッドを拡張する方法は次のとおりです。クラスを開いてメソッドを追加するだけです (Ruby 側からのみ機能します)。

class System::Windows::Forms::DataGridView
  def hide_columns(*columnNames)
    column_names.each do |cn|
      self.columns[cn].visible = false
    end
  end
end

拡張メソッドを直接使用するという提案に関する限り、params キーワードは IronRuby にとって苦痛です。引数を使用して型付き配列を作成し、それを渡す必要があります。ルビ文字列をルビ配列でラップすることはできません。これは、今日のブログ投稿で取り上げました。でも、それをスムーズに処理する方法があれば教えてください。

于 2009-09-23T15:16:35.703 に答える