Frage

Ich habe eine Datenquelle mit VB.NET und Visual Studio 2005. ich die Datenquelle auf mein Dialog gezogen, und VS erstellt die Textfelder mit den Mitgliedern meiner verknüpften Objekt, einem System.Windows.Forms.BindingSource und einem System.Windows.Forms.BindingNavigator.

ich bevölkern die Liste (genannt myList), Satz myList als Datasource im Binding, und die Dinge Arbeit peachy mit Ausnahme der Tatsache, dass ich dies werden wollen schreibgeschützt. Wenn der Benutzer etwas in einem der Textfelder ändert, speichert sie die Änderungen.

Ich hat versucht, eine schreibgeschützte Sammlung zu binden an das Binding zu schaffen, aber das hat das Problem nicht lösen:

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

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

ich denke, ich alle Textbox deaktivieren könnte, aber das scheint ein wenig plump, und ich würde wahrscheinlich will so die Schriftfarbe ändern, dass es einfacher zu lesen.

Idealerweise würde ich wahrscheinlich nicht, wenn Benutzer auf die Textfelder Set Fokus der Lage sind, oder auch bearbeiten die Inhalte, aber ich mag einfach keine Änderungen bestehen bleiben. Das heißt, wenn jemand etwas bearbeitet, verwendet, um den Navigator auf den nächsten Datensatz zu gehen, und dann wieder, ich würde es wollen, wie es vor dem Benutzer war mit ihm gespielt.

Irgendwelche Vorschläge / guidance?

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Von einer Model-View-Control Perspektive, die Einschränkung Sie wollen, ist nicht auf dem Modell oder die Kontrolle, aber die Aussicht. Der Blick sollte beschränken, was auf dem Bildschirm bearbeitet werden kann.

Wenn es wirklich schreibgeschützt ist, warum nicht mit einem schreibgeschützten Elemente Benutzeroberfläche, dh ein Label? Der Grund, warum Sie dies tun, ist Verwirrung für den Benutzer zu reduzieren. Wenn es ein Textfeld ist, gibt es eine vernünftige Erwartung, dass irgendwann die Daten bearbeitet werden. Ist dies nicht der Fall ist, dann ein behindertes Textbox präsentiert wird wahrscheinlich nicht das richtige UI-Element zu präsentieren, sondern, wie erwähnt, ein Etikett.

Andere Tipps

Statt ein Readonlycollection machen können Sie die Eigenschaft in der Klasse ändern (MyObjects) zu Readonly oder fügen Sie Attribut System.ComponentModel.ReadOnly (true), um Ihr Eigentum, Beispiel:

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; }
}

Identifikation und Name wird nur lesbar sein, sorry wenn das Beispiel ist in C #. Hoffe, das hilft.

Prost.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top