Readonly c# - не найдено подходящего метода для переопределения в настраиваемом текстовом поле winforms

Я создал функцию проверки орфографии в текстовом поле winforms. Следуя принятому ниже ответу.

Попытка использовать класс C# SpellCheck

Теперь моя проблема в том, что я хочу, чтобы мое текстовое поле было доступно только для чтения в некоторых случаях. Но похоже, что свойство readonly не работает, когда я пытаюсь выполнить следующее

spellbox.Readonly = true

Я даже попытался добавить в класс следующий метод, но он показывает ошибку как "Не найдено подходящего метода для отмены"

    [DefaultValue(true)]
     public override bool ReadOnly 
{ get {box.Readonly;} set {box.Readonly = value;} }

Код:

    using System;
    using System.ComponentModel;
    using System.ComponentModel.Design.Serialization;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Forms.Integration;
    using System.Windows.Forms.Design;

    namespace Activity_Tracker_Coding
    {
        [Designer(typeof(ControlDesigner))]
        //[DesignerSerializer("System.Windows.Forms.Design.ControlCodeDomSerializer, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.ComponentModel.Design.Serialization.CodeDomSerializer, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
        class SpellBox : ElementHost
        {
            public SpellBox()
            {
                box = new TextBox();
                base.Child = box;
                box.TextChanged += (s, e) => OnTextChanged(EventArgs.Empty);
                box.SpellCheck.IsEnabled = true;

                box.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
                this.Size = new System.Drawing.Size(100, 20);
            }
            public override string Text
            {
                get { return box.Text; }
                set { box.Text = value; }
            }

            [DefaultValue(false)]
            public bool Multiline
            {
                get { return box.AcceptsReturn; }
                set { box.AcceptsReturn = value; }
            }
            [DefaultValue(false)]
            public bool WordWrap
            {
                get { return box.TextWrapping != TextWrapping.NoWrap; }
                set { box.TextWrapping = value ? TextWrapping.Wrap : TextWrapping.NoWrap; }
            }
            [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
            public new System.Windows.UIElement Child
            {
                get { return base.Child; }
                set { /* Do nothing to solve a problem with the serializer !! */ }
            }
            private TextBox box;

        }
    }
0
0
126
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Взглянув на код в ссылке, он использует элемент управления WPF TextBox. Свойство только для чтения в WPF - IsReadOnly.

Я вижу, что вы наследуете объект ElementHost, который не содержит свойства ReadOnly.

На самом деле вам следует просто создать свой собственный внутри вашего класса SpellBox без переопределения. Это свойство затем получит доступ к свойству TextBox только для чтения.

[DefaultValue(true)]
public bool ReadOnly 
{ 
    get 
    {
        return box.Readonly;
    } 
    set 
    {
        box.Readonly = value;
    } 
}

Другие вопросы по теме