- PR -

EventArgsの作り方で質問です

投稿者投稿内容
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-03-02 14:46
以下のように書いてみました。
コード:
using System;
using System.ComponentModel;

namespace R.TANAKA.ICHIRO.Windows.Forms
{
    #region DataGridViewEditCancelEvent
    //****************************************************************************
    // DataGridViewEditCancelEvent
    //****************************************************************************/
    public delegate void DataGridViewEditCancelEventHandler(
        object sender,
        DataGridViewEditCancelEventArgs e
    );

    public class DataGridViewEditCancelEventArgs : CancelEventArgs
    {
        public DataGridViewEditCancelEventArgs(
            int columnIndex, 
            int rowIndex, 
            int[] selectedRowIndex, 
            object value
        );

        public int ColumnIndex { get; }

        public int RowIndex { get; }

        public int[] SelectedRowIndex { get; }

        public object Value { get; }
    }

    #endregion



すると、
'R.TANAKA.ICHIRO.Windows.Forms.DataGridViewEditCancelEventArgs.DataGridViewEditCancelEventArgs(int, int, int[], object)' は abstract または extern に指定されていないため、本体を宣言する必要があります。

'R.TANAKA.ICHIRO.Windows.Forms.DataGridViewEditCancelEventArgs.ColumnIndex.get' は abstract または extern に指定されていないため、本体を宣言する必要があります。

のエラーが表示されました。

名前空間の「R.TANAKA.ICHIRO」を「System」に変えると上記のエラーが表示されまません。

僕には、何故こうなるのかがわかりません。どなたか理由を教えていただけないでしょうか?
また、皆さんは既存のコントロールに機能拡張する時、名前空間名はどうしていますか?
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-02 14:58
ん?
単純に実装を書いてないからでは?行いたい事は何ですか?
_________________
囚人のジレンマな日々
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-02 15:06
まさか転記したソースをそのままビルドにはかけていませんよね?
特にコンストラクタの部分は明らかにおかしいです。

2003, 2005 ともに正常にビルド終了しました。

コード:

namespace R.TANAKA.ICHIRO.Windows.Forms {

    public delegate void DataGridViewEditCancelEventHandler(
        object sender,
        DataGridViewEditCancelEventArgs e
    );

    public class DataGridViewEditCancelEventArgs : System.ComponentModel.CancelEventArgs {
        public DataGridViewEditCancelEventArgs(int columnIndex, int rowIndex, int[] selectedRowIndex, object value) {

        }

        public int ColumnIndex {
            get {
                return 1;
            }
        }

        public int RowIndex {
            get {
                return 1;
            }
        }

        public int[] SelectedRowIndex {
            get {
                return null;
            }
        }

        public object Value {
            get {
                return null;
            }
        }
    }
}


面倒なので、1 とか null とか返してます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-03-02 15:06
引用:

囚人さんの書き込み (2006-03-02 14:58) より:
ん?
単純に実装を書いてないからでは?行いたい事は何ですか?




囚人さん、いつもありがとうございます。

行いたいことは、上記のコードでコンパイラを通すことです。
実装を書くとは、どのようなことをすれば良いのでしょうか?
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-02 15:09
引用:

実装を書くとは、どのようなことをすれば良いのでしょうか?


じゃんぬさんの提示されたコードのように中身を書いてやる事です。

田中さんが出されたコードは、インターフェースや抽象クラスのみが許されている書き方です。(インターフェースにコンストラクタはありませんが)
だから、abstract にしろってメッセージが出ているんですね。

[ メッセージ編集済み 編集者: 囚人 編集日時 2006-03-02 15:11 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-02 15:13
引用:

R・田中一郎さんの書き込み (2006-03-02 15:06) より:

実装を書くとは、どのようなことをすれば良いのでしょうか?


まず、コンストラクタが空で閉じられているので不正。
プロパティも空実装 (というと御幣ですが) なので不正。

囚人さんもコンパイラさんも、abstract クラスを作りたいのか、
実装クラスを作りたいのかが、わかりませんと言っているのだと思います。(^-^;)

囚人さんの場合 -> 行いたい事は何ですか?
コンパイラさんの場合 -> abstract または extern に指定されていないため〜

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-03-02 15:21
囚人さん、じゃんぬねっとさん、いつもありがとうございます。

引用:

じゃんぬねっとさんの書き込み (2006-03-02 15:06) より:

まさか転記したソースをそのままビルドにはかけていませんよね?
特にコンストラクタの部分は明らかにおかしいです。



DataGridViewCellBeginEditEventArgs の定義を開いてコピーして必要なプロパティ
分追加した訳です。
「ああ、こんな書き方ができるなんて、さすがシーシャーぷ」と感動していた訳です
が。

上記の「こんな書き方」は、もしかして、やってはいけないことなんでしょうか?
以下の書き方が正しいんでしょうか?

コード:


namespace R.TANAKA.ICHIRO.Windows.Forms {

public delegate void DataGridViewEditCancelEventHandler(
object sender,
DataGridViewEditCancelEventArgs e
);

public class DataGridViewEditCancelEventArgs : System.ComponentModel.CancelEventArgs {
public DataGridViewEditCancelEventArgs(int columnIndex, int rowIndex, int[] selectedRowIndex, object value) {
this._ColumnIndex = columnIndex;
this._RowIndex = rowIndex;
this._SelectedRowIndex = selectedRowIndex;
this._Value = value;
}

private int _ColumnIndex;
public int ColumnIndex {
get {
return this._ColumnIndex;
}
}

private int _RowIndex;
public int RowIndex {
get {
return this._RowIndex;
}
}

private int[] _SelectedRowIndex;
public int[] SelectedRowIndex {
get {
return this._SelectedRowIndex;
}
}

private object _Value;
public object Value {
get {
return this._Value;
}
}
}
}



[ メッセージ編集済み 編集者: R・田中一郎 編集日時 2006-03-02 15:22 ]
うにくま
ベテラン
会議室デビュー日: 2005/11/05
投稿数: 82
投稿日時: 2006-03-02 15:21
抽象クラスなのにabstractがない。
実装クラスなのに実装がない。
のどちらかです。

前者であれば以下で通るはずです。
コード:
using System;
using System.ComponentModel;

namespace R.TANAKA.ICHIRO.Windows.Forms
{
	#region DataGridViewEditCancelEvent
	//****************************************************************************
	// DataGridViewEditCancelEvent
	//****************************************************************************/
	public delegate void DataGridViewEditCancelEventHandler(
	object sender,
	DataGridViewEditCancelEventArgs e
	);
	public abstract class DataGridViewEditCancelEventArgs : CancelEventArgs
	{
		public DataGridViewEditCancelEventArgs(
			int columnIndex, 
			int rowIndex, 
			int[] selectedRowIndex, 
			object value
			)
		{}

		public abstract int ColumnIndex { get; }

		public abstract int RowIndex { get; }

		public abstract int[] SelectedRowIndex { get; }

		public abstract object Value { get; }
	}

	#endregion
}

スキルアップ/キャリアアップ(JOB@IT)