私は、組み込みシステムから取得して設定したデータを制御するWinforms PropertyGridをc#に持っています。プロパティグリッドによってスローされた例外を処理する方法は?
デバイス(GetFrequency、SetPowerLimit、SetACCurrentなど)に関するクエリをプロパティとして書き込み、作成したいフォーム内の各コマンドに別のメソッドを書き込まずにデータをバインドできるようにしました。
PropertyGridは本当にうまく機能します。つまり、必要なすべてのデータが表示され、値を変更できるようになります。しかし必ずしもそうではありません。
このブラックボックスは、動作する必要があるため、プログラムは通常いくつかの点で停止します。 (デバイスの電源を切ったときなど)
たとえば、デバイスから頻繁に読み込む必要がある値は次のとおりです。 "Simin"
[Category("Editable Values"), Description("Sets the minimum select...")]
public Ampere Simin
{
get
{...}
set
{...}
}
ゲッターとセッターの中には、これらのgetメソッドがあり、pcとデバイスの間の接続を確立しています。そして、それらは私がほとんど取る例外の実際の源です。この
if (!_port.IsOpen)
{
throw new HuettingerException(Localisation.Error_PortClosed);
}
またはこの
// Read first 4 bytes
if (_port.Read(inputv, 0, 4) != 4)
{
throw new HuettingerException(Localisation.Error_NoConnection);
}
同様
だから私は3つの抽象化層を持っていると私はいくつかを読み取ろうとしながら、私は(上記の図のような)機械側からの例外を取りますデータ。私は最初にそれらのいくつかをキャッチしようとしました
public DeviceUI()
{
InitializeComponent();
try
{
propertyGrid1.SelectedObject = device;
}
catch (TimeoutException te) // i tried other exceptions too
{
MessageBox.Show(te.Message);
}
winformの初期化時には動作しませんでした。
私の問題は、ボタンやテキストフィールドの場合は、イベントメソッドで例外を簡単にキャッチできますが、PropertyGridによってスローされた例外を処理することはできません。
私の最初のDownvoter、あなたは少なくともコメントを残すことができます。しかし、あなたは自分自身を改善している人たちがあなたをしているのを見たくないのですか? – 3yanlis1bos
私はdownvoterではないと私はおそらくdownvotedしていないだろう - しかし、それはあなたがどのようにPropertyGridを使用したかを示すいくつかのコードの欠如のためかもしれません。 – iandotkelly
これらの例外はいつ投げられるのですか?プロパティグリッドでユーザーが値を編集しているとき、またはコード内のイベントによって値を更新しているとき? –