質問させていただきます。
VB.net 2012 を使用しています。
dllを作成し、複数のプログラムで使用しています。
このdllに、呼出し元の関数をコールする機能をつけたいのですが
可能でしょうか。
-------------------------------------------------------------
プログラムA(関数ABC有り) --> dllを使用
プログラムB(関数ABC有り) --> dllを使用
プログラムC(関数ABC無し) --> dllを使用
-------------------------------------------------------------
dllにはプログラムの関数ABCをコールする機能を付与する。
プログラムAとプログラムBを実行するとdllから関数ABCがコールされる。
プログラムCにはABC関数がないため、何も起こらない。
-------------------------------------------------------------
上記のような事は可能でしょうか。
説明が下手で申し訳ありませんが
よろしくお願い足します。
No.1
- 回答日時:
RaiseEvent で呼ぶ。
ご返信ありがとうございます。
RaiseEvent で実行してみました。
From1のButton1を押下時すると「成功!」が出力します。
<from1>--------------
Public WithEvents nTest As New TestDLL
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
nTest.DoTest()
End Sub
Public Sub Test_PopUp(ByVal sender As Object, e As EventArgs) Handles nTest.PopUp
MsgBox("成功!")
End Sub
<dll:TestDLL>-------
Public Event PopUp(ByVal sender As Object, ByVal e As EventArgs)
Public Sub DoTest()
RaiseEvent PopUp(Me, New EventArgs)
End Sub
----------
ただ今回はFormのイベントでは無く
以下のようにdll内でイベントを呼び出したいと考えています。
<dll:TestDLL>-------
Public Event PopUp(ByVal sender As Object, ByVal e As EventArgs)
Protected Overrides Sub OnKeyPress(ByVal e As System.Windows.Forms.KeyPressEventArgs)
[ 処理 ]
'このタイミングで「成功!」のメッセージを出したい
RaiseEvent PopUp(Me, New EventArgs)
End Sub
-----------
上記例の場合、OnKeyPressの[処理]の後にメッセージを呼び出したいのですが
うまく動きませんでした。
上記のような処理は可能でしょうか。
お手数ですが、よろしくお願いいたします。
No.2
- 回答日時:
その関数ABCを機能として持つインターフェースを用意し、
インターフェース経由で実行すればいいのでは。
プログラムCはそもそもインターフェースを実装していないということで
呼出自体を行わない作りにすれば。
ご返信ありがとうございます。
上記説明が足りなかったのですが、
プログラムAとプログラムBの中にあるABC関数内の処理は
異なる処理を記述する予定です。
あくまで「ABCという関数を実行する」ということが目的でした。
説明が足りず、申しわけありません。
インタフェースを用いる案はなかったので、
参考にさせていただきます。
ありがとうございます。
No.4ベストアンサー
- 回答日時:
こういうこと?
普通のただのイベントを書けばいいように思えますが。
Public Class DataGridViewEx
Inherits DataGridView
Public Delegate Sub PastedEventHandler(sender As Object, cell As DataGridViewCell)
Public Event Pasted As PastedEventHandler
Protected Overrides Sub OnPreviewKeyDown(e As PreviewKeyDownEventArgs)
MyBase.OnPreviewKeyDown(e)
If e.KeyData = (Keys.Control + Keys.V) Then
Me.OnPasted()
End If
End Sub
Protected Overridable Sub OnPasted()
Me.CurrentCell.Value = Clipboard.GetText()
RaiseEvent Pasted(Me, Me.CurrentCell)
End Sub
End Class
Public Class Form1
Private Sub DataGridViewEx1_Pasted(sender As Object, cell As DataGridViewCell) Handles DataGridViewEx1.Pasted
DataGridViewEx1.Rows(cell.RowIndex).Cells(cell.ColumnIndex + 1).Value = "X"
End Sub
End Class
ご返信ありがとうございます。
いただいたサンプルを参考に
思っていた通りの処理ができました。
イベントの呼び出し方を勘違いしていました。
つたない説明にお付き合いいただき、ありがとうございます。
本当に助かりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
高校生はアルバイトするべきだろうか?賛成だったら「賛」、否定だったら「否」を文頭においてあなたの意見を教えてください。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
VB.NETで、DLLを頂いたんですが・・
Visual Basic(VBA)
-
System.IO.Directory.GetFilesの順番
Visual Basic(VBA)
-
VB.NETでのnothing の意義について
Visual Basic(VBA)
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで4096点以上のFFTの方法
-
VBAにてメール作成した際、一部...
-
ゲーミングPCに入っているAlris...
-
自動クエリとはどういうもので...
-
「Outlookが他のプログラムによ...
-
プログラムの実行時間
-
未使用の変数を一括検索する方法
-
PICマイコンのコピー(クローン...
-
VBAでユーザーフォームが自動的...
-
ドロップダウンリストの文字を...
-
Excelに埋め込んだVBAのプログ...
-
C言語で移動平均のプログラムを...
-
https://same.blog/2021/05/28/...
-
転職・プログラマー 未経験者...
-
C言語で実行時間を指定して終了...
-
c言語 三角形
-
読み込み中にアクセス違反が発...
-
n88basicからwindows版Basicへ...
-
XnViewにwebpを「いつも開く」...
-
クリックするとページ内で説明...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
あるプログラムのコマンドライ...
-
ゲーミングPCに入っているAlris...
-
Excelで4096点以上のFFTの方法
-
PICマイコンのコピー(クローン...
-
自動クエリとはどういうもので...
-
VBAにてメール作成した際、一部...
-
読み込み中にアクセス違反が発...
-
「Outlookが他のプログラムによ...
-
Excelに埋め込んだVBAのプログ...
-
VBAでユーザーフォームが自動的...
-
XnViewにwebpを「いつも開く」...
-
画像を読み込むのと取り込むの...
-
ドロップダウンリストの文字を...
-
CASLIIのプログラム(並び替え...
-
binファイルってiphone専用です...
-
モジュール、アプリケーション...
-
excelのexe化について
-
未使用の変数を一括検索する方法
-
クリックするとページ内で説明...
-
Vba UserFormを前面に出す方法...
おすすめ情報
詳細を記します。
DataGridViewに独自機能を追加したユーザーコントロール(dll)を
作成しています。
目的は Ctrl+V で貼り付け処理を追加するためです。
プログラムA,B,CでDataGridViewを使用しており、
貼り付け機能はA,B,Cのすべてで必要のためdllを参照しています。
プログラムAは、
データを張り付けた後に対象列Xに固定文言を貼り付ける必要があります。
プログラムBは、
データを張り付けた後に隠し列Yに値をセットする必要があります。
プログラムCは特に貼り付け後の処理が必要ありません。
続く→
ソースサンプルは以下の通りです。
<プログラムA>---
Public WithEvents nTest As New TestDLL
Public Sub ABC(ByVal sender As Object, e As EventArgs) Handles nTest.Do_ABC
【データを貼り付けた行の対象列X列に、固定文言「AAA」をセットする処理】
End Sub
<プログラムB>---
Public WithEvents nTest As New TestDLL
Public Sub ABC(ByVal sender As Object, e As EventArgs) Handles nTest.Do_ABC
【データを貼り付けた行の隠し列Yに、固定値「100」をセットする処理】
End Sub
<プログラムC>---
ABC関数は無し
続く→
<dll:TestDLL>
Public Event Do_ABC(ByVal sender As Object, ByVal e As EventArgs)
Protected Overrides Sub OnPreviewKeyDown(e As PreviewKeyDownEventArgs)
MyBase.OnPreviewKeyDown(e)
【貼り付け処理】
’’ここでABC関数を実行したい!!!
RaiseEvent Do_ABC(Me, New EventArgs)
End Sub
ここでABC関数を実行したい!! という箇所に「RaiseEvent」で
ABCを実行したいのですが、うまく動きませんでした。
宜しくお願い致します。