私は、ゲームで発生する特定のイベントをログに記録できるC#アプリケーションを用意しています。簡単にするために、私はそれらをParentForm
とChildForm
と呼ぶでしょう。C#新しいインスタンスを持たないフォーム間を通過する特定の値
ParentForm
は、一般的なイベントを記録するために99%の時間が使用されます。これは、ユーザがPictureBox
をクリックし、PictureBox
のTag
プロパティがListBox
に追加されたことで表されます。 「希少な」イベントが発生すると、ユーザーはの「ログのまれなイベント」ボタンをクリックしてChildForm
を開き、「希少イベント」のセットPictureBoxes
を開きます。これはParentForm
と同じです。課題は、これらの一般的なイベントと希少なイベントを同じListBox
に記録することです。そのため、PictureBox
のクリック(この後Tag
からPictureBox
へ)のChildForm
からListBox
へのParentForm 。
ParentForm
はではなく、であり、ChildForm
は開いており、開いたままにする必要があります。 ParentForm
コードで
、私はすでにPictureBox
クリックのいずれかをキャプチャするために必要なコードとTag
をつかむだけでなく、ListBox
に追加扱う取り扱いを持っているので、私がちょうど使うことができればいいと思いますこれら。
// This file is EventLogger.cs
using rareEvent;
namespace mainWindow {
public partial class EventLogger : Form {
// In the ParentForm (listeners for PictureBox clicks are handled elsewhere)
public void pictureBox_Click(object sender, EventArgs e) {
PictureBox pbSender = (PictureBox) sender;
// Open new window and handle "rare" drops
if (pbSender.Tag.ToString() == "rare") {
// Open rare form
EventLogger.RareForm rare = new EventLogger.RareForm();
rare.Show();
}
}
}
}
、ここでは、子供の::ここで
私は親のためにこれまでに試したものだ
// This file is Rare.cs
using EventLogger;
namespace rareEvent {
public partial class rareEventForm : Form {
// In the ChildForm
private void pictureBox_Click(object sender, EventArgs e) {
// Does not compile if form is not instantiated, but I do not
// want a new instance
EventLogger form;
form.pictureBox_Click(sender, e);
}
}
}
私はこのような何かが働くと考えましたが、それは誤り
を与えるThe type or namespace name 'EventLogger' does not exist in the namespace
'mainWindow' (are you missing an assembly reference?)
ご協力いただければ幸いです。私がフォームの間を通る価値の発見した他のすべての例はすべて、私が欲しくない、または8歳であって動作しなかった新しいインスタンスを作成するようです。
ありがとうございます!
編集:各ファイルにusing <namespace>
というコードが追加されました。両方の形式の間で値を送信できないという問題は依然として存在しますを使用せずにnew
を使用します。 (this答えを参照してください)
インスタンスを使用して2つのフォーム間で引数を渡す必要がありますが、インスタンスを閉じる必要はありません。 2つのフォームプロジェクトを参照してください。私が5年以上前に開発したこのコードを使用している人がたくさんいます。他の専門家も私のコードを推奨しています:https://msdn.microsoft.com/en-us/library/w89fhyex(v=vs.110).aspx。私はどんな追加の質問にも答えてうれしいです。 – jdweng
あなたが正しいことをリンクしているかどうかわからない - そのリンクはソケットに行き、 'two form project'については何も言われていない。 – Sej
あなたの正しい。このリンクは、TCP上での異なる投稿に対する応答でした。ここに正しいリンクがあります:http://stackoverflow.com/questions/34975508/reach-control-from-another-page-asp-net – jdweng