0

VB.NETとVisualStudio2005を使用してデータソースを作成しました。データソースをダイアログにドラッグすると、VSはリンクされたオブジェクトのメンバーであるaSystem.Windows.Forms.BindingSourceと。を含むテキストボックスを作成しましたSystem.Windows.Forms.BindingNavigator

リスト(myListと呼ばれる)にデータを入力し、BindingSourceでmyListをDataSourceとして設定すると、これを読み取り専用にしたいという事実を除いて、物事はうまく機能します。ユーザーがテキストボックスの1つで何かを変更すると、変更が保存されます。

BindingSourceにバインドする読み取り専用コレクションを作成しようとしましたが、問題は解決しませんでした。

Dim detailsDlg As New dlgMyDetails
Dim readOnlyList As New ReadOnlyCollection(Of MyObjects)(myList)

detailsDlg.MyBindingSource.DataSource = readOnlyList
detailsDlg.ShowDialog()

すべてのテキストボックスを無効にできると思いますが、それは少し手間がかかるようです。さらに、読みやすくするためにフォントの色を変更したいと思います。

理想的には、ユーザーがテキストボックスにフォーカスを設定したり、コンテンツを編集したりできるかどうかは気にしないでしょうが、変更を保持したくないだけです。つまり、誰かが何かを編集し、ナビゲーターを使用して次のレコードに移動してから戻ってきた場合、ユーザーがそれを再生する前の状態のままにしておく必要があります。

何か提案/ガイダンスはありますか?

前もって感謝します!

4

2 に答える 2

2

Model-View-Controlの観点からは、必要な制約はモデルやコントロールではなく、ビューにあります。ビューは、画面上で編集可能なものを制限する必要があります。

本当に読み取り専用の場合は、読み取り専用のユーザーインターフェイス要素(ラベルなど)を使用してみませんか?これを行う理由は、ユーザーの混乱を減らすためです。テキストボックスの場合、ある時点でデータが編集可能になることが合理的に予想されます。そうでない場合は、無効になっているテキストボックスを表示することは、前述のように、ラベルを表示するのに適切なUI要素ではない可能性があります。

于 2010-02-20T23:30:03.890 に答える
1

ReadOnlyCollectionを作成する代わりに、クラス(MyObjects)のプロパティをReadOnlyに変更するか、属性System.ComponentModel.ReadOnly(true)をプロパティに追加できます(例:

class Person
{
    public Person(int id, string name, string address)
    {
        _id = id;
        Name = name;
        Address = address;
    }

    private int _id = 0;
    public int ID { get { return _id; } }

    [System.ComponentModel.ReadOnly(true)]
    public string Name { get; set; }

    public string Address { get; set; }
}

IDと名前は読み取り専用になります。例がC#の場合は申し訳ありません。お役に立てれば。

乾杯。

于 2010-02-16T05:07:27.023 に答える