BindingSource と 独自クラスで入力チェックをしたい
- 題名: BindingSource と 独自クラスで入力チェックをしたい
- 著者: finedb
- 日時: 2013/04/21 14:01:08
- ID: 31489
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: BindingSource と 独自クラスで入力チェックをしたい
- 著者: Azulean
- 日時: 2013/04/21 20:12:06
- ID: 31490
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: できました。Re[2]: BindingSource と 独自クラスで入力チェックをしたい
- 著者: finedb
- 日時: 2013/04/21 20:33:58
- ID: 31491
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
MSDNの「Binding.BindingComplete イベント」のサンプルコードを実行するとエラーでプログラムが止まります。
TextBox3 の数字の入力範囲のチェックをしたと思っています。
「Part」クラスを作って 100以下の数字を入力した場合の入力チェックをして「BindingComplete」イベントで入力チェックの結果を処理したいと思っています。
「デバッグなしで開始」の実行は、うまくいくのですが、「デバッグ開始」の実行は、画像のようなエラーになります。
どのようにすればよいのでしょうか?
サンプルコードの一部を変更しています。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication9 {
public partial class Form1 : Form {
private BindingSource BindingSource1 = new BindingSource();
Binding partNameBinding;
Binding partNumberBinding;
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
// Set the DataSource of BindingSource1 to the Part type.
try {
BindingSource1.DataSource = typeof(Part);
// Bind the textboxes to the properties of the Part type,
// enabling formatting.
partNameBinding = textBox1.DataBindings.Add("Text",
BindingSource1, "PartName", true);
partNumberBinding = textBox2.DataBindings.Add("Text", BindingSource1, "PartNumber",
true);
//Bind the textbox to the PartPrice value with currency formatting.
textBox3.DataBindings.Add("Text", BindingSource1, "PartPrice", true,
DataSourceUpdateMode.OnPropertyChanged, 0, "C");
// Handle the BindingComplete event for BindingSource1 and
// the partNameBinding.
partNumberBinding.BindingComplete +=
new BindingCompleteEventHandler(partNumberBinding_BindingComplete);
partNameBinding.BindingComplete +=
new BindingCompleteEventHandler(partNameBinding_BindingComplete);
// Add a new part to BindingSource1.
BindingSource1.Add(new Part("Widget", 1234, 12.45));
} catch (Exception) {
}
}
void partNumberBinding_BindingComplete(object sender,
BindingCompleteEventArgs e) {
if (e.BindingCompleteState != BindingCompleteState.Success)
Console.WriteLine("partNumberBinding: " + e.ErrorText);
}
// Handle the BindingComplete event to catch errors and
// exceptions in binding process.
void partNameBinding_BindingComplete(object sender,
BindingCompleteEventArgs e) {
if (e.BindingCompleteState != BindingCompleteState.Success)
Console.WriteLine("partNameBinding: " + e.ErrorText);
}
}
// Represents a business object that throws exceptions when invalid values are
// entered for some of its properties.
public class Part {
private string name;
private int number;
private double price;
public Part(string name, int number, double price) {
PartName = name;
PartNumber = number;
PartPrice = price;
}
public string PartName {
get { return name; }
set {
name = value;
}
}
public double PartPrice {
get { return price; }
set { price = value; }
}
public int PartNumber {
get { return number; }
set {
if (value < 100)
throw new Exception("Invalid part number." +
" Part numbers must be greater than 100.");
else
number = value;
}
}
}
}