ডাব্লুপিএফ টেক্সটবক্সে ফোকাসের সমস্ত পাঠ কীভাবে স্বয়ংক্রিয়ভাবে নির্বাচন করবেন?


232

যদি আমি SelectAllকোনও GotFocusইভেন্ট হ্যান্ডলার থেকে কল করি তবে এটি মাউসের সাথে কাজ করে না - মাউস প্রকাশের সাথে সাথে নির্বাচন অদৃশ্য হয়ে যায়।

সম্পাদনা: লোকেরা ডোনেলের উত্তর পছন্দ করছে, আমি কেন এটি গ্রহণযোগ্য উত্তরের চেয়ে বেশি পছন্দ করি নি তা বোঝানোর চেষ্টা করব।

  • এটি আরও জটিল, যখন গৃহীত উত্তরগুলি সরল উপায়ে একই কাজ করে।
  • গৃহীত উত্তরের ব্যবহারযোগ্যতা আরও ভাল। আপনি যখন পাঠ্যের মাঝখানে ক্লিক করেন, আপনি মাউসটি তাত্ক্ষণিকভাবে সম্পাদনা শুরু করার অনুমতি দিলে পাঠ্যটি অনির্বাচিত হয় এবং আপনি যদি এখনও সমস্তটি নির্বাচন করতে চান তবে কেবল আবার বোতামটি টিপুন এবং এবার এটি মুক্তির জন্য নির্বাচন করা যাবে না। দোনেলের রেসিপি অনুসরণ করে, আমি যদি পাঠ্যের মাঝখানে ক্লিক করি তবে সম্পাদনা করতে সক্ষম হতে আমাকে দ্বিতীয়বার ক্লিক করতে হবে। আমি যদি পাঠ্যের বাইরে বনাম পাঠ্যের বাইরে কোথাও ক্লিক করি তবে এর সম্ভবত সম্ভবত আমি সমস্ত কিছু ওভাররাইট করার পরিবর্তে সম্পাদনা শুরু করতে চাই।

যদি আপনি একাধিক ফর্ম পেতে চলেছেন তবে তার উত্তরটি প্রথমের তুলনায় কম জটিল হতে চলেছে। উভয় বিকল্পের ব্যবহারযোগ্যতা হ'ল আপনি যে কোনও একটিতে কীভাবে কাজ করবেন তা আপনি পরিবর্তন করতে পারবেন।
thepaulpage

1
@ সার্জি: আপনি এই প্রশ্নের গ্রহণযোগ্য উত্তর পরিবর্তন করতে চাইতে পারেন, যেহেতু আরও ভাল উত্তর এসেছে answers আমি আমার প্রস্তাব দিতে যাচ্ছি না, তবে আপনি পারতেন;)
গ্রোকাইস

প্রশ্নের সিলভারলাইট ট্যাগ রয়েছে, তবু সিলভারলাইটের বেশিরভাগ ইভেন্ট / কোনও ধরণের প্রাকদর্শন ইভেন্ট নেই। সিলভারলাইটের জন্য কোন সমাধানটি ব্যবহার করা উচিত?
ভ্যালেন্টিন কুজুব

লিঙ্ক "ডাব্লুপিএফ-এ কেন মনোযোগ কেন এত জটিল?" ভাঙা
ম্যাক্সেন্স

1
হিসাবে একটি মন্তব্যে উল্লেখ stackoverflow.com/a/2553297/492 নীচে madprops.org/blog/wpf-textbox-selectall-on-focus একটি সহজ সমাধান এবং মূল nouse আচরণ অপরিবর্তিত। আমি ইভেন্টটির নিবন্ধটি কনস্ট্রাক্টরে রেখেছি কারণ অ্যাপটিতে আমার কেবল একটি ডাব্লুপিএফ নিয়ন্ত্রণ রয়েছে।
সিএডি

উত্তর:


75

কেন GotFocusইভেন্টে এটি নির্বাচন হেরে যায় তা জানেন না ।

তবে একটি সমাধান হল নির্বাচন GotKeyboardFocusএবং GotMouseCaptureইভেন্টগুলিতে নির্বাচন করা । এইভাবে এটি সর্বদা কাজ করবে।


10
নাঃ। বিদ্যমান পাঠ্যের মাঝখানে মাউস দিয়ে ক্লিক করা হলে - মাউস বোতামটি প্রকাশের সাথে সাথেই নির্বাচনটি হারিয়ে যায়।
সের্গেই আলদোখভ

3
যদিও - দ্বিতীয় একক ক্লিকের পরে, এটি আবার সমস্ত পাঠ্য নির্বাচন করে ... নিশ্চিত নয় যে এটি ডাব্লুপিএফ ডিজাইনারদের উদ্দেশ্যমূলক আচরণ কিনা, তবে ব্যবহারযোগ্যতাটি এটি খারাপ নয়। একক গটফোকাস হ্যান্ডলার থেকে অন্য পার্থক্য হ'ল পাঠ্যবক্সে একটি ফাঁকা জায়গায় ক্লিক করা সমস্ত নির্বাচন করে।
সের্গেই আলদুখভ

3
এটি আমার মুষ্টি সমাধানও ছিল। তবে আমি দেখতে পেয়েছি যে ব্যবহারকারীরা যখন মাউস ব্যবহার করে পাঠ্য নির্বাচন করতে অক্ষম হন, তখন তারা সত্যই বিরক্ত হন, কারণ প্রতিবার তারা ক্লিক করলে পুরো পাঠ্যটি নির্বাচিত হয়ে যায় ...
নীল

1
এই সমাধানটির আরও একটি অপূর্ণতা হ'ল আপনি যখন টেক্সটবক্সের "কাট / অনুলিপি / আটকান" মেনুটি ব্যবহার করেন, আপনি যখন কোনও মেনু আইটেম নির্বাচন করেন তখন পুরো পাঠ্যটি নির্বাচিত হয়।

@gcores আমি জানি এটি পুরানো, তবে কেউ কি জানেন যে কেন গটফোকাস ইভেন্টে নির্বাচিত পাঠ্যটি হারিয়ে গেছে? এটি অন্যান্য ইভেন্টগুলিতে কাজ করার বিষয়ে আপনি সঠিক, যদিও এটি আমার বইয়ের একটি সম্পূর্ণ গ্রহণযোগ্য সমাধান।
ভান

210

আমাদের কাছে এটি তাই প্রথম ক্লিকটি সমস্তটি নির্বাচন করে এবং অন্য ক্লিকটি কার্সারে যায় (আমাদের অ্যাপ্লিকেশনটি কলমযুক্ত ট্যাবলেটগুলিতে ব্যবহারের জন্য ডিজাইন করা হয়েছে)।

আপনি এটি দরকারী মনে হতে পারে।

public class ClickSelectTextBox : TextBox
{
    public ClickSelectTextBox()
    {
        AddHandler(PreviewMouseLeftButtonDownEvent, 
          new MouseButtonEventHandler(SelectivelyIgnoreMouseButton), true);
        AddHandler(GotKeyboardFocusEvent, 
          new RoutedEventHandler(SelectAllText), true);
        AddHandler(MouseDoubleClickEvent, 
          new RoutedEventHandler(SelectAllText), true);
    }

    private static void SelectivelyIgnoreMouseButton(object sender, 
                                                     MouseButtonEventArgs e)
    {
        // Find the TextBox
        DependencyObject parent = e.OriginalSource as UIElement;
        while (parent != null && !(parent is TextBox))
            parent = VisualTreeHelper.GetParent(parent);

        if (parent != null)
        {
            var textBox = (TextBox)parent;
            if (!textBox.IsKeyboardFocusWithin)
            {
                // If the text box is not yet focussed, give it the focus and
                // stop further processing of this click event.
                textBox.Focus();
                e.Handled = true;
            }
        }
    }

    private static void SelectAllText(object sender, RoutedEventArgs e)
    {
        var textBox = e.OriginalSource as TextBox;
        if (textBox != null)
            textBox.SelectAll();
    }
}

9
এই জন্য আপনাকে অনেক ধন্যবাদ। এটি আশ্চর্যজনকভাবে কাজ করে এবং স্বীকৃত উত্তর আইএমএইচও হওয়া উচিত। উপরের কোডটি যখন টেক্সটবক্স কীবোর্ড বা মাউস (এবং দৃশ্যত স্টাইলাস) এর মাধ্যমে ফোকাস পায় তখন কাজ করে। +1
ড্রয় নোকস

5
আমি এখানে প্রায় একইরকম উত্তর পেয়েছি সোশ্যাল.এমএসএনএন.মাইক্রোসফট.ফর্মস / এন- ইউএস / ডাব্লুপিএফ / থ্রেড / ,, এটি পাশাপাশি কাজ করে, কখনই এটি ই.আরগিনালসোর্স ব্যবহার করে না, বা চাক্ষুষ গাছের মধ্য দিয়ে হামাগুড়ি দেয় না। এই সমস্ত কিছু করে লাভ আছে?
মার্কো লুগলিও

1
দুর্দান্ত কাজ করে তবে এটি যদি মাউসের সাহায্যে টেক্সট টেনে আনার অনুমতি দেয় তবে তা নিখুঁত হবে। গুগল ক্রোম অ্যাড্রেস বারটি আদর্শ সিস্টেমের একটি নিখুঁত উদাহরণ: যদি ব্যবহারকারী টেনে না নিয়ে ক্লিক করে এবং প্রকাশ করে তবে পুরো পাঠ্যটি হাইলাইট করা হবে। তবে ব্যবহারকারী যদি ক্লিক করে এবং টেনে নিয়ে যায় তবে টানা সমস্ত নির্বাচন না করে সাধারণত পাঠ্য নির্বাচন করে। সিলেক্টএল কেবলমাত্র মাউস রিলিজ হয় । আমি কোলাহল করব এবং আমি এই নকশাটি আদৌ উন্নত করতে পারবো কিনা তা দেখুন।
ডিভাইস 1

2
এই সমাধানটির আরও একটি অপূর্ণতা হ'ল আপনি যখন টেক্সটবক্সের "কাট / অনুলিপি / আটকান" মেনুটি ব্যবহার করেন, আপনি যখন কোনও মেনু আইটেম নির্বাচন করেন তখন পুরো পাঠ্যটি নির্বাচিত হয়।

1
আমি আবিষ্কার করেছি যে এটির উন্নতি SelectAllTextপদ্ধতিতে একটি অতিরিক্ত পরীক্ষা textBox.IsFocusedGetKeyboardFocusপ্রোগ্রামটিতে ওয়েল-ট্যাবিংয়ের কারণে আপনি সমস্ত নির্বাচন করতে চান না ।
স্কট স্টাফোর্ড

164

ডোনেলের উত্তরটি সবচেয়ে ভাল কাজ করে, তবে এটি ব্যবহার করার জন্য একটি নতুন শ্রেণি অর্জন করা ব্যথা।

এটি করার পরিবর্তে আমি অ্যাপ্লিকেশনটিতে সমস্ত পাঠ্যবক্সের জন্য হ্যান্ডলারগুলিকে App.xaml.cs এ নিবন্ধিত করি। এটি আমাকে স্ট্যান্ডার্ড পাঠ্যবক্স নিয়ন্ত্রণের সাথে একটি ডোনেলের উত্তর ব্যবহার করতে দেয়।

আপনার App.xaml.cs এ নিম্নলিখিত পদ্ধতিগুলি যুক্ত করুন:

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e) 
    {
        // Select the text in a TextBox when it receives focus.
        EventManager.RegisterClassHandler(typeof(TextBox), TextBox.PreviewMouseLeftButtonDownEvent,
            new MouseButtonEventHandler(SelectivelyIgnoreMouseButton));
        EventManager.RegisterClassHandler(typeof(TextBox), TextBox.GotKeyboardFocusEvent, 
            new RoutedEventHandler(SelectAllText));
        EventManager.RegisterClassHandler(typeof(TextBox), TextBox.MouseDoubleClickEvent,
            new RoutedEventHandler(SelectAllText));
        base.OnStartup(e); 
    }

    void SelectivelyIgnoreMouseButton(object sender, MouseButtonEventArgs e)
    {
        // Find the TextBox
        DependencyObject parent = e.OriginalSource as UIElement;
        while (parent != null && !(parent is TextBox))
            parent = VisualTreeHelper.GetParent(parent);

        if (parent != null)
        {
            var textBox = (TextBox)parent;
            if (!textBox.IsKeyboardFocusWithin)
            {
                // If the text box is not yet focused, give it the focus and
                // stop further processing of this click event.
                textBox.Focus();
                e.Handled = true;
            }
        }
    }

    void SelectAllText(object sender, RoutedEventArgs e)
    {
        var textBox = e.OriginalSource as TextBox;
        if (textBox != null)
            textBox.SelectAll();
    }
}

4
এটি একটি দুর্দান্ত শীতল সমাধান, এটি ম্যাট হ্যামিল্টন কয়েক
অ্যাশলে ডেভিস

'গ্রহন', 'কেন্দ্রীভূত'
নেট জাগ

2
ধন্যবাদ নেট, সংশোধন করা হয়েছে, যদিও আমার প্রতিরক্ষার সাথে আমি
দানেলের

প্রশ্নের সিলভারলাইট ট্যাগ রয়েছে, তবু সিলভারলাইটের বেশিরভাগ ইভেন্ট / কোনও ধরণের প্রাকদর্শন ইভেন্ট নেই। সিলভারলাইটের জন্য কোন সমাধানটি ব্যবহার করা উচিত? অগ্রিম ধন্যবাদ
ভ্যালেন্টাইন কুজুব

4
"যুক্ত বানানটি মার্কিন যুক্তরাষ্ট্রে অনেক বেশি প্রচলিত; তবে, যুক্ত বানানটি কখনও কখনও যুক্তরাজ্য এবং কানাডায় ব্যবহৃত হয় এবং বিশেষত অস্ট্রেলিয়া এবং নিউজিল্যান্ডে প্রচলিত হয়।" সুতরাং nyah;)
দোনেলে

85

এটি বরং পুরানো, তবে আমি আমার উত্তরটি যাইহোক প্রদর্শন করব।

আমি ডোনেলের উত্তরের একটি অংশ বেছে নিয়েছি (ডাবল-ক্লিক এড়িয়ে গেছে) কারণ আমি মনে করি এটি আরও প্রাকৃতিক। যাইহোক, gcores মত আমি একটি উত্পন্ন ক্লাস তৈরি করা প্রয়োজন অপছন্দ করি। তবে আমি gcores OnStartupপদ্ধতিও পছন্দ করি না । এবং আমার এটি "সাধারণত তবে সর্বদা নয়" ভিত্তিতে দরকার।

আমি এটি সংযুক্ত হিসাবে প্রয়োগ করেছি DependencyPropertyযাতে আমি local:SelectTextOnFocus.Active = "True"xaml এ সেট করতে পারি। আমি এই উপায়টি সবচেয়ে আনন্দদায়ক মনে করি।

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;

public class SelectTextOnFocus : DependencyObject
{
    public static readonly DependencyProperty ActiveProperty = DependencyProperty.RegisterAttached(
        "Active",
        typeof(bool),
        typeof(SelectTextOnFocus),
        new PropertyMetadata(false, ActivePropertyChanged));

    private static void ActivePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        if (d is TextBox)
        {
            TextBox textBox = d as TextBox;
            if ((e.NewValue as bool?).GetValueOrDefault(false))
            {
                textBox.GotKeyboardFocus += OnKeyboardFocusSelectText;
                textBox.PreviewMouseLeftButtonDown += OnMouseLeftButtonDown;
            }
            else
            {
                textBox.GotKeyboardFocus -= OnKeyboardFocusSelectText;
                textBox.PreviewMouseLeftButtonDown -= OnMouseLeftButtonDown;
            }
        }
    }

    private static void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        DependencyObject dependencyObject = GetParentFromVisualTree(e.OriginalSource);

        if (dependencyObject == null)
        {
            return;
        }

        var textBox = (TextBox)dependencyObject;
        if (!textBox.IsKeyboardFocusWithin)
        {
            textBox.Focus();
            e.Handled = true;
        }
    }

    private static DependencyObject GetParentFromVisualTree(object source)
    {
        DependencyObject parent = source as UIElement;
        while (parent != null && !(parent is TextBox))
        {
            parent = VisualTreeHelper.GetParent(parent);
        }

        return parent;
    }

    private static void OnKeyboardFocusSelectText(object sender, KeyboardFocusChangedEventArgs e)
    {
        TextBox textBox = e.OriginalSource as TextBox;
        if (textBox != null)
        {
            textBox.SelectAll();
        }
    }

    [AttachedPropertyBrowsableForChildrenAttribute(IncludeDescendants = false)]
    [AttachedPropertyBrowsableForType(typeof(TextBox))]
    public static bool GetActive(DependencyObject @object)
    {
        return (bool) @object.GetValue(ActiveProperty);
    }

    public static void SetActive(DependencyObject @object, bool value)
    {
        @object.SetValue(ActiveProperty, value);
    }
}

আমার "সাধারণ তবে সর্বদা নয়" বৈশিষ্ট্যের জন্য আমি এই সংযুক্তি সম্পত্তিটিকে Trueএকটি (বিশ্বব্যাপী) সেট করে রেখেছি TextBox Style। এইভাবে "পাঠ্য নির্বাচন করা" সর্বদা "চালু" থাকে তবে আমি এটি প্রতি-পাঠ্যবক্স-ভিত্তিতে অক্ষম করতে পারি।


8
+1 এটি বিশ্বব্যাপী সেট করার চেয়ে অনেক ভাল এবং এটি টেক্সটবক্স থেকে প্রাপ্ত চেয়ে 'ডাব্লুপিএফ উপায়'।
stijn

3
+1 স্টেঞ্জেনের সাথে একমত অ্যাপ্লিকেশনগুলিতে আপনার কোডটি "লুকিয়ে রাখা" দরিদ্র দেবদের পক্ষে ভাল নয় যারা কেন নির্বাচন করুন সমস্ত ফোকাস ঘটছে তা নির্ধারণ করতে হবে। :-) আমি এটি কেবল টেক্সটবক্সবিহিয়রগুলির জন্য আমার ক্লাসে ফেলেছি এবং তারপরে আমার বেস টেক্সটবক্স স্টাইলটি আপডেট করেছি। একটি ট্রিট কাজ করেছেন। চিয়ার্স
লি ক্যাম্পবেল

2
@ ট্রোন্ডা: টেক্সটবক্সের একটি টার্গেটটাইপ ব্যবহার করে সংস্থানগুলিতে কেবল একটি শৈলী যুক্ত করুন। আমি আপনাকে পরামর্শ দিচ্ছি wpftutorial.net/Styles.html
নিল

2
সেরা উত্তরের জন্য আরও একটি +1। আমি যে সমস্যাটি পেয়েছি তা হ'ল পাঠ্যটি সর্বদা নির্বাচন করা হয় এমনকি যখনই আমি সঠিক মাউস বোতামটি ব্যবহার করি না - যা আমি প্রায়শই প্রসঙ্গ মেনু দিয়ে পাঠ্য সম্পাদনা করতে করি - সমাধানটি এই ক্ষেত্রে কার্যকর হয় না কারণ এটি সর্বদা সমস্ত লেখা নির্বাচন করে এমনকি আমি যদি প্রসঙ্গ মেনু দিয়ে কেবল 1 শব্দটি কাটতে চেয়েছি। আপনি ছেলেরা কিভাবে এটি ঠিক করতে জানেন?
ব্যবহারকারী 3313608

2
আমি এই উত্তরটি পছন্দ করি তবে কেন আপনাকে নির্ভরতা অবজেক্টটি বাড়িয়ে দিতে হবে? আমি এটি সরিয়েছি এবং এটি এখনও ঠিক কাজ করে।
ফ্রেড

47

আপনার সুবিধার জন্য উত্তর সমাধানটি এখানে মিশ্রিত আচরণগুলি দেওয়া হচ্ছে:

একটি একক পাঠ্যবক্সে সংযুক্ত করার জন্য একটি:

public class SelectAllTextOnFocusBehavior : Behavior<TextBox>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        AssociatedObject.GotKeyboardFocus += AssociatedObjectGotKeyboardFocus;
        AssociatedObject.GotMouseCapture += AssociatedObjectGotMouseCapture;
        AssociatedObject.PreviewMouseLeftButtonDown += AssociatedObjectPreviewMouseLeftButtonDown;
    }

    protected override void OnDetaching()
    {
        base.OnDetaching();
        AssociatedObject.GotKeyboardFocus -= AssociatedObjectGotKeyboardFocus;
        AssociatedObject.GotMouseCapture -= AssociatedObjectGotMouseCapture;
        AssociatedObject.PreviewMouseLeftButtonDown -= AssociatedObjectPreviewMouseLeftButtonDown;
    }

    private void AssociatedObjectGotKeyboardFocus(object sender,
        System.Windows.Input.KeyboardFocusChangedEventArgs e)
    {
        AssociatedObject.SelectAll();
    }

    private void AssociatedObjectGotMouseCapture(object sender,
        System.Windows.Input.MouseEventArgs e)
    {
        AssociatedObject.SelectAll();   
    }

    private void AssociatedObjectPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        if(!AssociatedObject.IsKeyboardFocusWithin)
        {
            AssociatedObject.Focus();
            e.Handled = true;
        }
    }
}

এবং একাধিক পাঠ্যবক্স'সযুক্ত ধারকটির মূলে সংযুক্ত হওয়ার জন্য একটি:

public class SelectAllTextOnFocusMultiBehavior : Behavior<UIElement>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        AssociatedObject.GotKeyboardFocus += HandleKeyboardFocus;
        AssociatedObject.GotMouseCapture += HandleMouseCapture;
    }

    protected override void OnDetaching()
    {
        base.OnDetaching();
        AssociatedObject.GotKeyboardFocus -= HandleKeyboardFocus;
        AssociatedObject.GotMouseCapture -= HandleMouseCapture;
    }

    private static void HandleKeyboardFocus(object sender,
        System.Windows.Input.KeyboardFocusChangedEventArgs e)
    {
        var txt = e.NewFocus as TextBox;
        if (txt != null)
            txt.SelectAll();
    }

    private static void HandleMouseCapture(object sender,
        System.Windows.Input.MouseEventArgs e)
    {
        var txt = e.OriginalSource as TextBox;
        if (txt != null)
            txt.SelectAll();
    }
}

এটি এখন পর্যন্ত সর্বোত্তম এবং পরিষ্কার সমাধান। এটি ভাগ করে নেওয়ার জন্য অনেক ধন্যবাদ।
গোলভেলিয়াস

এটি দেখতে দুর্দান্ত লাগছে তবে কোনও কারণে এটি ট্যাব নিয়ন্ত্রণকে ভেঙে দেয় ... কোনও ধারণা কেন?
মার্চ

আমি ইওর দ্রবণটি ব্যবহার করতে চাই। কিন্তু সত্যিই হারিয়েছে ... আপনার কাছে কি নমুনা আছে?
জুয়ান পাবলো গোমেজ

ফোকাস থাকার সময় আপনি যখন পাঠ্যবক্সের কোথাও ক্লিক করেন (কল্পনা করুন যে আপনি ক্যারেটকে অন্য কোনও স্থানে নিয়ে যেতে চান) এটি ক্যারেটের পরিবর্তে পরিবর্তে আবার সমস্ত নির্বাচন করবে। এটি অপ্রত্যাশিত গটমাউসক্যাপচারকে মাউসডুবলক্লিকের পরিবর্তে এটি স্থির করে নিন যা সাধারণ। এমএসডিএন পরবর্তী উত্তরগুলি ধন্যবাদ।
নোরখভ

1
পাঠ্যবক্সটি ফোকাসম্যানেজার.ফোকাসডিলমেন্টের মাধ্যমে প্রাথমিক ফোকাসটি গ্রহণ করবে বলে মনে হয় না। কোন ধারণা কেন?
szx

24

যদিও এটি একটি পুরানো প্রশ্ন, আমি স্রেজি এর উত্তরের মত এক্সপ্রেশন আচরণের চেয়ে এটি কেবল একটি সংযুক্ত আচরণ ব্যবহার করে সমাধান করেছি। এর অর্থ System.Windows.Interactivityব্লেন্ড এসডিকে আমার নির্ভরতা লাগবে না :

public class TextBoxBehavior
{
    public static bool GetSelectAllTextOnFocus(TextBox textBox)
    {
        return (bool)textBox.GetValue(SelectAllTextOnFocusProperty);
    }

    public static void SetSelectAllTextOnFocus(TextBox textBox, bool value)
    {
        textBox.SetValue(SelectAllTextOnFocusProperty, value);
    }

    public static readonly DependencyProperty SelectAllTextOnFocusProperty =
        DependencyProperty.RegisterAttached(
            "SelectAllTextOnFocus",
            typeof (bool),
            typeof (TextBoxBehavior),
            new UIPropertyMetadata(false, OnSelectAllTextOnFocusChanged));

    private static void OnSelectAllTextOnFocusChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var textBox = d as TextBox;
        if (textBox == null) return;

        if (e.NewValue is bool == false) return;

        if ((bool) e.NewValue)
        {
            textBox.GotFocus += SelectAll;
            textBox.PreviewMouseDown += IgnoreMouseButton;
        }
        else
        {
            textBox.GotFocus -= SelectAll;
            textBox.PreviewMouseDown -= IgnoreMouseButton;
        }
    }

    private static void SelectAll(object sender, RoutedEventArgs e)
    {
        var textBox = e.OriginalSource as TextBox;
        if (textBox == null) return;
        textBox.SelectAll();
    }

    private static void IgnoreMouseButton(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        var textBox = sender as TextBox;
        if (textBox == null || (!textBox.IsReadOnly && textBox.IsKeyboardFocusWithin)) return;

        e.Handled = true;
        textBox.Focus();
    }
}

তারপরে আপনি এটি আপনার এক্সএএমএলে এটির মতো ব্যবহার করতে পারেন:

<TextBox Text="Some Text" behaviors:TextBoxBehavior.SelectAllTextOnFocus="True"/>

আমি এটি সম্পর্কে এখানে ব্লগ ।


আমি এই পদ্ধতির পছন্দ করি তবে গেট / সেট পদ্ধতিগুলি "সম্পত্তি" এ শেষ হওয়া উচিত নয়; Xaml অংশ যুক্ত করার পরে কোড সংকলন পেতে আমাকে তা সরিয়ে ফেলতে হয়েছিল।
প্যাট্রিক Quirk

খুব সুন্দর, প্রত্যাশার মতোই কাজ করেছেন। আমি এটি পছন্দ করি কারণ এটি এমভিভিএম করার সময় আমাকে উদ্বেগগুলি পৃথক রাখতে সহায়তা করে।
কিলনাইন

16

এমএসডিএন সম্পর্কে এখানে খুব ভাল একটি খুব সহজ সমাধান :

<TextBox
    MouseDoubleClick="SelectAddress"
    GotKeyboardFocus="SelectAddress"
    PreviewMouseLeftButtonDown="SelectivelyIgnoreMouseButton" />

পিছনে কোডটি এখানে:

private void SelectAddress(object sender, RoutedEventArgs e)
{
    TextBox tb = (sender as TextBox);
    if (tb != null)
    {
        tb.SelectAll();
    }
}

private void SelectivelyIgnoreMouseButton(object sender,
    MouseButtonEventArgs e)
{
    TextBox tb = (sender as TextBox);
    if (tb != null)
    {
        if (!tb.IsKeyboardFocusWithin)
        {
            e.Handled = true;
            tb.Focus();
        }
    }
}

1
মূলত, এটি এই থ্রেডে সর্বাধিক রেটযুক্ত হিসাবে একই সমাধান। তবে এটি দু'বছর আগে যেহেতু এখন আমি জানি যে @ ডোনেলে কোথা থেকে এটি নিয়েছিল;)
সের্গে আলদোখভ

এই সমাধানটি আমার পক্ষে সবচেয়ে সহজ এবং কাজ করেছে। আমি পাঠ্যবক্সে প্রবেশের সময় পূর্বনির্ধারিত পাঠ্যের একটি নির্দিষ্ট উপসেট চাইছিলাম।
জ্যাক বি নিমবল

10

আমি মনে করি এটি কার্যকরভাবে কাজ করে:

private void ValueText_GotFocus(object sender, RoutedEventArgs e)
{
    TextBox tb = (TextBox)e.OriginalSource;
    tb.Dispatcher.BeginInvoke(
        new Action(delegate
            {
                tb.SelectAll();
            }), System.Windows.Threading.DispatcherPriority.Input);
}

আপনি যদি এটি কোনও এক্সটেনশন পদ্ধতি হিসাবে প্রয়োগ করতে চান:

public static void SelectAllText(this System.Windows.Controls.TextBox tb)
{
    tb.Dispatcher.BeginInvoke(
        new Action(delegate
        {
            tb.SelectAll();
        }), System.Windows.Threading.DispatcherPriority.Input);
}

এবং আপনার GotFocusইভেন্টে:

private void ValueText_GotFocus(object sender, RoutedEventArgs e)
{
    TextBox tb = (TextBox)e.OriginalSource;
    tb.SelectAllText();
}

আমি উপরের সমাধানটি আবিষ্কার করেছিলাম কারণ বেশ কয়েক মাস আগে আমি প্রদত্তের দিকে মনোনিবেশ করার জন্য একটি উপায় খুঁজছিলাম UIElement। আমি নীচের কোডটি কোথাও আবিষ্কার করেছি (ক্রেডিট এখানে দেওয়া হয়েছে) এবং এটি ভালভাবে কাজ করে। যদিও এটি ওপির প্রশ্নের সাথে সরাসরি সম্পর্কিত না হয় তবে আমি এটি পোস্ট করি কারণ এটি Dispatcherক এর সাথে কাজ করার একই প্যাটার্নটি প্রদর্শন করে UIElement

// Sets focus to uiElement
public static void DelayedFocus(this UIElement uiElement)
{
    uiElement.Dispatcher.BeginInvoke(
    new Action(delegate
    {
        uiElement.Focusable = true;
        uiElement.Focus();
        Keyboard.Focus(uiElement);
    }),
    DispatcherPriority.Render);
}

আমার ধারণা এটি বাস্তবায়নের সবচেয়ে সহজ পদ্ধতি। এক্সটেনশন পদ্ধতি তৈরি করার পরে আপনাকে কেবল আমার টেক্সটবক্সকে কল করতে হবে eসিলেক্টআলটেক্সট ()। কেন এই উত্তরটি আরও পয়েন্ট পেল না? অন্য সমাধানগুলি এত ভাল কেন?
টোনো নাম

2
আমি এই পদ্ধতিটি এড়িয়ে যাব কারণ এটি পাঠ্যবক্সের মাউসআপ হ্যান্ডলারের পরে চালানোর জন্য একটি অ্যাসিঙ্ক কলের উপর নির্ভর করছে। আমি এটি 100% নির্বিচারক হিসাবে বিশ্বাস করব না এবং এটি বেমানান আচরণের দিকে পরিচালিত করতে পারে। যদিও এটি হওয়ার সম্ভাবনা কম, তবুও আমি বরং উপরের শিফার পদ্ধতিগুলির সাথে যাব।
রব এইচ

6

অন্যান্য সমস্যার সমাধান দিয়ে কিছু সমস্যার সমাধান করার চেষ্টা এখানে করা হল:

  1. কাট / অনুলিপি / অতীতের জন্য ডান ক্লিকের প্রসঙ্গ মেনু ব্যবহার করে সমস্ত পাঠ্য নির্বাচন না করলেও আপনি এটি সমস্ত নির্বাচন না করে।
  2. ডান ক্লিকের প্রসঙ্গ মেনু থেকে ফিরে আসার সময়, সমস্ত পাঠ্য সর্বদা নির্বাচিত হয়।
  3. Alt+ সহ অ্যাপ্লিকেশনটিতে ফিরে আসার সময় Tabসমস্ত পাঠ্য সর্বদা নির্বাচিত হয়।
  4. প্রথম ক্লিকে পাঠ্যের কেবলমাত্র অংশটি বেছে নেওয়ার চেষ্টা করার সময়, সবসময় নির্বাচিত হয় (উদাহরণস্বরূপ গুগল ক্রোম ঠিকানা বারের তুলনায়)।

আমার লেখা কোডটি কনফিগারযোগ্য। আপনি কি পদক্ষেপ সব আচরণ নির্বাচন তিন কেবলমাত্র ক্ষেত্র সেট করে ঘটা উচিত উপর একটি নির্বাচন করুন: SelectOnKeybourdFocus, SelectOnMouseLeftClick, SelectOnMouseRightClick

এই সমাধানটির ক্ষতিটি হ'ল এটি আরও জটিল এবং স্থিতিশীল অবস্থা সঞ্চিত। এটি TextBoxনিয়ন্ত্রণের ডিফল্ট আচরণের সাথে এক কুৎসিত লড়াইয়ের মতো বলে মনে হচ্ছে । তবুও, এটি কাজ করে এবং সমস্ত কোড সংযুক্ত সম্পত্তি ধারক শ্রেণিতে লুকানো থাকে।

public static class TextBoxExtensions
{
    // Configuration fields to choose on what actions the select all behavior should occur.
    static readonly bool SelectOnKeybourdFocus = true;
    static readonly bool SelectOnMouseLeftClick = true;
    static readonly bool SelectOnMouseRightClick = true;

    // Remembers a right click context menu that is opened 
    static ContextMenu ContextMenu = null;

    // Remembers if the first action on the TextBox is mouse down 
    static bool FirstActionIsMouseDown = false;

    public static readonly DependencyProperty SelectOnFocusProperty =
        DependencyProperty.RegisterAttached("SelectOnFocus", typeof(bool), typeof(TextBoxExtensions), new PropertyMetadata(false, new PropertyChangedCallback(OnSelectOnFocusChanged)));

    [AttachedPropertyBrowsableForChildren(IncludeDescendants = false)]
    [AttachedPropertyBrowsableForType(typeof(TextBox))]
    public static bool GetSelectOnFocus(DependencyObject obj)
    {
        return (bool)obj.GetValue(SelectOnFocusProperty);
    }

    public static void SetSelectOnFocus(DependencyObject obj, bool value)
    {
        obj.SetValue(SelectOnFocusProperty, value);
    }

    private static void OnSelectOnFocusChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        if (!(d is TextBox textBox)) return;

        if (GetSelectOnFocus(textBox))
        {
            // Register events
            textBox.PreviewMouseDown += TextBox_PreviewMouseDown;
            textBox.PreviewMouseUp += TextBox_PreviewMouseUp;
            textBox.GotKeyboardFocus += TextBox_GotKeyboardFocus;
            textBox.LostKeyboardFocus += TextBox_LostKeyboardFocus;
        }
        else
        {
            // Unregister events
            textBox.PreviewMouseDown -= TextBox_PreviewMouseDown;
            textBox.PreviewMouseUp -= TextBox_PreviewMouseUp;
            textBox.GotKeyboardFocus -= TextBox_GotKeyboardFocus;
            textBox.LostKeyboardFocus -= TextBox_LostKeyboardFocus;
        }
    }

    private static void TextBox_PreviewMouseDown(object sender, MouseButtonEventArgs e)
    {
        if (!(sender is TextBox textBox)) return;

        // If mouse clicked and focus was not in text box, remember this is the first click.
        // This will enable to prevent select all when the text box gets the keyboard focus 
        // right after the mouse down event.
        if (!textBox.IsKeyboardFocusWithin)
        {
            FirstActionIsMouseDown = true;
        }
    }

    private static void TextBox_PreviewMouseUp(object sender, MouseButtonEventArgs e)
    {
        if (!(sender is TextBox textBox)) return;

        // Select all only if:
        // 1) SelectOnMouseLeftClick/SelectOnMouseRightClick is true and left/right button was clicked
        // 3) This is the first click
        // 4) No text is selected
        if (((SelectOnMouseLeftClick && e.ChangedButton == MouseButton.Left) || 
            (SelectOnMouseRightClick && e.ChangedButton == MouseButton.Right)) &&
            FirstActionIsMouseDown &&
            string.IsNullOrEmpty(textBox.SelectedText))
        {
            textBox.SelectAll();
        }

        // It is not the first click 
        FirstActionIsMouseDown = false;
    }

    private static void TextBox_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
    {
        if (!(sender is TextBox textBox)) return;

        // Select all only if:
        // 1) SelectOnKeybourdFocus is true
        // 2) Focus was not previously out of the application (e.OldFocus != null)
        // 3) The mouse was pressed down for the first after on the text box
        // 4) Focus was not previously in the context menu
        if (SelectOnKeybourdFocus &&
            e.OldFocus != null &&
            !FirstActionIsMouseDown &&
            !IsObjectInObjectTree(e.OldFocus as DependencyObject, ContextMenu))
        {
            textBox.SelectAll();
        }

        // Forget ContextMenu
        ContextMenu = null;
    }

    private static void TextBox_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
    {
        if (!(sender is TextBox textBox)) return;

        // Remember ContextMenu (if opened)
        ContextMenu = e.NewFocus as ContextMenu;

        // Forget selection when focus is lost if:
        // 1) Focus is still in the application
        // 2) The context menu was not opened
        if (e.NewFocus != null
            && ContextMenu == null)
        {
            textBox.SelectionLength = 0;
        }
    }

    // Helper function to look if a DependencyObject is contained in the visual tree of another object
    private static bool IsObjectInObjectTree(DependencyObject searchInObject, DependencyObject compireToObject)
    {
        while (searchInObject != null && searchInObject != compireToObject)
        {
            searchInObject = VisualTreeHelper.GetParent(searchInObject);
        }

        return searchInObject != null;
    }
}

একটি সংযুক্ত সম্পত্তি যুক্ত করতে TextBox, আপনাকে যা যা করতে হবে তা হল xmlnsসংযুক্ত সম্পত্তির এক্সএমএল নেমস্পেস ( ) যুক্ত করতে হবে এবং তারপরে এটি ব্যবহার করুন:

<TextBox attachedprop:TextBoxExtensions.SelectOnFocus="True"/>

এই সমাধান সম্পর্কে কিছু নোট:

  1. মাউস ডাউন ইভেন্টের ডিফল্ট আচরণকে ওভাররাইড করতে এবং প্রথম ক্লিকে পাঠ্যের কেবলমাত্র অংশ নির্বাচন করতে সক্ষম করতে, সমস্ত পাঠ্য মাউস আপ ইভেন্টে নির্বাচিত হয়।
  2. TextBoxফোকাস হারাবার পরে আমাকে তার নির্বাচনের বিষয়টি মনে রাখার সত্যটিই মোকাবিলা করতে হয়েছিল । আমি আসলে এই আচরণটি ওভাররাইড করেছি।
  3. আমাকে মনে রাখতে হবে মাউস বোতাম নীচে TextBox( FirstActionIsMouseDownস্ট্যাটিক ফিল্ড) এ প্রথম ক্রিয়া হয় কিনা ।
  4. আমি ডান ক্লিক ( ContextMenuস্থিতিশীল ক্ষেত্র) দ্বারা খোলা প্রসঙ্গ মেনু মনে রাখতে হবে ।

আমি কেবলমাত্র পার্শ্ব প্রতিক্রিয়াটি পেয়েছি যখন SelectOnMouseRightClickসত্য হয়। কখনও কখনও ডান-ক্লিকের প্রসঙ্গ মেনুতে ফ্লিকাররা যখন খোলায় এবং খালিটিতে ডান-ক্লিক হয় TextBox"সমস্ত নির্বাচন করুন" না করে।


5

আমি এখানে উপস্থাপিত উত্তরগুলির একটিও একটি স্ট্যান্ডার্ড উইন্ডোজ টেক্সটবক্সের নকল করে খুঁজে পাইনি। উদাহরণস্বরূপ, পাঠ্যবক্সের শেষ অক্ষর এবং পাঠ্য বাক্সের ডান পাশের মধ্যে সাদা স্থানটিতে ক্লিক করার চেষ্টা করুন। এখানে বেশিরভাগ সমাধানগুলি সর্বদা পুরো সামগ্রীটি নির্বাচন করবে, যা পাঠ্যবাক্সে পাঠ্য যুক্ত করা খুব কঠিন করে তোলে।

আমি এখানে যে উত্তরটি উপস্থাপন করছি তা এই ক্ষেত্রে আরও ভাল আচরণ করে। এটা একটা আচরণ (তাই এটি প্রয়োজন System.Windows.Interactivity থেকে সমাবেশ মিশ্রণের SDK এর )। এটি সংযুক্ত বৈশিষ্ট্যগুলি ব্যবহার করে আবারও লেখা যেতে পারে।

public sealed class SelectAllTextOnFocusBehavior : Behavior<TextBox>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        AssociatedObject.PreviewMouseLeftButtonDown += AssociatedObject_PreviewMouseLeftButtonDown;
    }

    protected override void OnDetaching()
    {
        base.OnDetaching();
        AssociatedObject.PreviewMouseLeftButtonDown -= AssociatedObject_PreviewMouseLeftButtonDown;
    }

    void AssociatedObject_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        // Find the textbox
        DependencyObject parent = e.OriginalSource as UIElement;
        while (parent != null && !(parent is TextBox))
            parent = VisualTreeHelper.GetParent(parent);

        var textBox = parent as TextBox;
        Debug.Assert(textBox != null);

        if (textBox.IsFocused) return;

        textBox.SelectAll();
        Keyboard.Focus(textBox);
        e.Handled = true;
    }
}

এটি আমি এখানে খুঁজে পেয়েছি কোড ভিত্তিক ।


1
যদিও এটি একটি উত্তরের উত্তর, আমি মনে করি যে ব্যবহারকারী যখন সাদা স্থানটিতে ক্লিক করেন তখন তাঁর উদ্দেশ্যটি (ব্যবসায়িক প্রয়োগে) সম্ভবত পুরো মানটিকে ওভাররাইড করে, তাই সমস্তটি নির্বাচন করা সঠিক পন্থা।
সের্গেই আলদৌখভ

1
সার্জি: প্রথম ক্লিকটি পুরো মানটি নির্বাচন করবে, দ্বিতীয় ক্লিকটি মানটির ডানদিকে কার্সার রাখবে। উপস্থাপিত অন্যান্য সমাধানগুলিতে, দ্বিতীয় ক্লিকটি পুরো মানটি নির্বাচিত রাখে, মানটিতে যুক্ত হওয়া খুব কঠিন করে তোলে।
ক্রিস্টফ ভার্বিয়েস্ট

এটি কীভাবে ব্যবহৃত হয়? আমি এই কোডটি App.xaml.cs এ যুক্ত করেছি তবে আমার অ্যাপ্লিকেশনটিতে টেক্সটবক্সগুলিতে এর কোনও প্রভাব আছে বলে মনে হচ্ছে না।
পিন্ট্যাগ

5

এই সাধারণ বাস্তবায়ন আমার পক্ষে নিখুঁতভাবে কাজ করে:

void TextBox_GotFocus(object sender, RoutedEventArgs e)
{
    ((TextBox) sender).SelectAll();
}

void TextBox_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    var TextBox = (TextBox) sender;
    if (!TextBox.IsKeyboardFocusWithin)
    {
        TextBox.Focus();
        e.Handled = true;
    }
}

এটি সবার ক্ষেত্রে প্রয়োগ করতে TextBoxনীচের কোডটি পরে রাখুনInitializeComponent();

EventManager.RegisterClassHandler(typeof(TextBox), TextBox.GotFocusEvent, new RoutedEventHandler(TextBox_GotFocus));
EventManager.RegisterClassHandler(typeof(TextBox), TextBox.PreviewMouseDownEvent, new MouseButtonEventHandler(TextBox_PreviewMouseDown));

4

App.xaml ফাইলটিতে:

<Application.Resources>
    <Style TargetType="TextBox">
        <EventSetter Event="GotKeyboardFocus" Handler="TextBox_GotKeyboardFocus"/>
    </Style>
</Application.Resources>

App.xaml.cs ফাইলটিতে:

private void TextBox_GotKeyboardFocus(Object sender, KeyboardFocusChangedEventArgs e)
{
    ((TextBox)sender).SelectAll();
}

এই কোডটি দিয়ে আপনি TextBoxআপনার অ্যাপ্লিকেশনটিতে পৌঁছে গেছেন।


3

এখান থেকে নেওয়া :

App.xaml.cs ফাইলে বিশ্বব্যাপী ইভেন্ট হ্যান্ডলার নিবন্ধন করুন:

protected override void OnStartup(StartupEventArgs e)
{
    EventManager.RegisterClassHandler(typeof(TextBox),TextBox.GotFocusEvent,
    new RoutedEventHandler(TextBox_GotFocus));

    base.OnStartup(e);
}

তারপরে হ্যান্ডলারটি এতটা সহজ:

private void TextBox_GotFocus(object sender, RoutedEventArgs e)
{
    (sender as TextBox).SelectAll();
}

3

আমি বুঝতে পারি এটি খুব পুরানো, তবে এখানে আমার সমাধান যা এক্সপ্রেশন / মাইক্রোসফ্ট ইন্টারেক্টিভিটি এবং ইন্টারঅ্যাকশন নামের স্থানের ভিত্তিতে তৈরি।

প্রথমে, ইন্টারঅ্যাক্টিভিটি ট্রিগারকে শৈলীতে স্থান দেওয়ার জন্য আমি এই লিঙ্কের নির্দেশাবলী অনুসরণ করেছি ।

তারপরে এটি নেমে আসে

<Style x:Key="baseTextBox" TargetType="TextBox">
  <Setter Property="gint:InteractivityItems.Template">
    <Setter.Value>
      <gint:InteractivityTemplate>
        <gint:InteractivityItems>
          <gint:InteractivityItems.Triggers>
            <i:EventTrigger EventName="GotKeyboardFocus">
              <ei:CallMethodAction MethodName="SelectAll"/>
            </i:EventTrigger>
            <i:EventTrigger EventName="PreviewMouseLeftButtonDown">
              <ei:CallMethodAction MethodName="TextBox_PreviewMouseLeftButtonDown"
                TargetObject="{Binding ElementName=HostElementName}"/>
            </i:EventTrigger>
          </gint:InteractivityItems.Triggers>
        </gint:InteractivityItems>
      </gint:InteractivityTemplate>
    </Setter.Value>
  </Setter>
</Style>

এবং এই

public void TextBox_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
  TextBox tb = e.Source as TextBox;
  if((tb != null) && (tb.IsKeyboardFocusWithin == false))
  {
    tb.Focus();
    e.Handled = true;
  }
}

আমার ক্ষেত্রে, আমার ব্যবহারকারীর নিয়ন্ত্রণ রয়েছে যেখানে পাঠ্য বাক্সগুলির কোড-পিছনে রয়েছে। কোড-পিছনে হ্যান্ডলার ফাংশন রয়েছে। আমি আমার ব্যবহারকারীকে এক্সএএমএল-তে একটি নাম নিয়ন্ত্রণ দিয়েছি এবং আমি সেই নামটি উপাদানটির জন্য ব্যবহার করছি। এটি আমার জন্য নিখুঁতভাবে কাজ করছে। TextBoxআপনি যখন ক্লিক করেন তখন সমস্ত পাঠ্য নির্বাচন করতে চাইলে কেবল স্টাইলটি প্রয়োগ করুন TextBox

ইভেন্টটি যখন আগুনে নেমে আসে তখন প্রথমে CallMethodActionপাঠ্য বাক্সের SelectAllপদ্ধতিটিকে কল করে ।GotKeyboardFocusTextBox

আশা করি এটা কাজে লাগবে.


যেহেতু এটি এত পুরানো প্রশ্ন, আপনি কেন এই পদ্ধতির চয়ন করতে পারেন তা উল্লেখ করলে এটি আপনার উত্তরটিকে কিছুটা মনোযোগ দিতে সহায়তা করতে পারে।
ডিবিবিসান ২

প্রথমত, এটি কোনও শৈলীতে রাখার দরকার নেই, তবে আমি মনে করি এটি স্পষ্টভাবে মনে হয় যে অনেকগুলি টেক্সট বাক্স নিয়ন্ত্রণ রয়েছে যা এটির প্রয়োজন, একটি শৈলীর উপায়।
উইওসায়া

1
সম্ভবত কিছু এই পদ্ধতির সাথে একমত হবেন না, তবে কেন আপনি এই পদ্ধতির ব্যবহার করতে পারেন এটির জন্য পাঠ্যবক্স সাবক্লাসিং, শ্রেণি হ্যান্ডলারের ইভেন্টগুলি নিবন্ধকরণ, বর্ধিতকরণ পদ্ধতি, সংযুক্ত বৈশিষ্ট্য তৈরি ইত্যাদি প্রয়োজন হয় না, স্টাইল হিসাবে এটি যুক্তও করা যেতে পারে, যে কোনও এক্সএমএল প্রকল্পের সংস্থান অভিধানে। এক্স: কী ব্যতীত, প্রতিটি স্বতন্ত্র পাঠ্য বাক্সের এক্সএএমএল পরিবর্তন না করেই এটি संसाधन অভিধানের আওতায় থাকা কোনও পাঠ্যবক্স উদাহরণে প্রয়োগ করা হবে। কিছু ক্ষেত্রে, এটি একটি পরিষ্কার পদ্ধতির হতে পারে।
উইওসায়া

2

আমি নীল এর উত্তর ব্যবহার করেছি তবে আরও নমনীয় করে রুপান্তরিত করেছি।

public enum SelectAllMode
{

    /// <summary>
    ///  On first focus, it selects all then leave off textbox and doesn't check again
    /// </summary>
    OnFirstFocusThenLeaveOff = 0,

    /// <summary>
    ///  On first focus, it selects all then never selects
    /// </summary>
    OnFirstFocusThenNever = 1,

    /// <summary>
    /// Selects all on every focus
    /// </summary>
    OnEveryFocus = 2,

    /// <summary>
    /// Never selects text (WPF's default attitude)
    /// </summary>
    Never = 4,
}

public partial class TextBox : DependencyObject
{
    public static readonly DependencyProperty SelectAllModeProperty = DependencyProperty.RegisterAttached(
        "SelectAllMode",
        typeof(SelectAllMode?),
        typeof(TextBox),
        new PropertyMetadata(SelectAllModePropertyChanged));

    private static void SelectAllModePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        if (d is System.Windows.Controls.TextBox)
        {
            var textBox = d as System.Windows.Controls.TextBox;

            if (e.NewValue != null)
            {
                textBox.GotKeyboardFocus += OnKeyboardFocusSelectText;
                textBox.PreviewMouseLeftButtonDown += OnMouseLeftButtonDown;
            }
            else
            {
                textBox.GotKeyboardFocus -= OnKeyboardFocusSelectText;
                textBox.PreviewMouseLeftButtonDown -= OnMouseLeftButtonDown;
            }
        }
    }

    private static void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        DependencyObject dependencyObject = GetParentFromVisualTree(e.OriginalSource);

        if (dependencyObject == null)
            return;

        var textBox = (System.Windows.Controls.TextBox)dependencyObject;
        if (!textBox.IsKeyboardFocusWithin)
        {
            textBox.Focus();
            e.Handled = true;
        }
    }

    private static DependencyObject GetParentFromVisualTree(object source)
    {
        DependencyObject parent = source as UIElement;
        while (parent != null && !(parent is System.Windows.Controls.TextBox))
        {
            parent = VisualTreeHelper.GetParent(parent);
        }

        return parent;
    }

    private static void OnKeyboardFocusSelectText(object sender, KeyboardFocusChangedEventArgs e)
    {
        var textBox = e.OriginalSource as System.Windows.Controls.TextBox;
        if (textBox == null) return;

        var selectAllMode = GetSelectAllMode(textBox);

        if (selectAllMode == SelectAllMode.Never)
        {
            textBox.SelectionStart = 0;
            textBox.SelectionLength = 0;
        }
        else
            textBox.SelectAll();

        if (selectAllMode == SelectAllMode.OnFirstFocusThenNever)
            SetSelectAllMode(textBox, SelectAllMode.Never);
        else if (selectAllMode == SelectAllMode.OnFirstFocusThenLeaveOff)
            SetSelectAllMode(textBox, null);
    }

    [AttachedPropertyBrowsableForChildrenAttribute(IncludeDescendants = false)]
    [AttachedPropertyBrowsableForType(typeof(System.Windows.Controls.TextBox))]
    public static SelectAllMode? GetSelectAllMode(DependencyObject @object)
    {
        return (SelectAllMode)@object.GetValue(SelectAllModeProperty);
    }

    public static void SetSelectAllMode(DependencyObject @object, SelectAllMode? value)
    {
        @object.SetValue(SelectAllModeProperty, value);
    }
}

এক্সএএমএল-তে আপনি এর একটির মতো ব্যবহার করতে পারেন:

<!-- On first focus, it selects all then leave off textbox and doesn't check again -->
<TextBox attprop:TextBox.SelectAllMode="OnFirstFocusThenLeaveOff" />

<!-- On first focus, it selects all then never selects -->
<TextBox attprop:TextBox.SelectAllMode="OnFirstFocusThenNever" />

<!-- Selects all on every focus -->
<TextBox attprop:TextBox.SelectAllMode="OnEveryFocus" />

<!-- Never selects text (WPF's default attitude) -->
<TextBox attprop:TextBox.SelectAllMode="Never" />

1
টেমপ্লেটগুলিতে ব্যবহারের জন্য সত্যিই ভাল সমাধান যেহেতু আপনি কোনও টেক্সটবক্সের প্রসারিত আচরণ ছাড়া কোনও আসল কোডবিহিন্ড ছাড়াই এটিকে xaml এ আবদ্ধ করতে পারেন।
এরিক জোহানসন

2

@ নাসেনবায়ার পোস্ট করা উত্তরের সি # সংস্করণ এখানে

private delegate void TextBoxSelectAllDelegate(object sender);

private void TextBoxSelectAll(object sender)
{
    (sender as System.Windows.Controls.TextBox).SelectAll();
}

private void MyTextBox_GotFocus(object sender, System.Windows.RoutedEventArgs e)
{
    TextBoxSelectAllDelegate d = TextBoxSelectAll;

    this.Dispatcher.BeginInvoke(d,
        System.Windows.Threading.DispatcherPriority.ApplicationIdle, sender);
}

যদিও MyTextBox_GotFocusইভেন্ট হ্যান্ডলারটি GotFocusইভেন্টের জন্য বরাদ্দ করা হয়েছে MyTextBox


2

এর জন্য আমার কিছুটা সরলিকৃত উত্তর রয়েছে (কেবল PreviewMouseLeftButtonDownইভেন্টের সাথে) যা মনে হয় কোনও ব্রাউজারের স্বাভাবিক কার্যকারিতা নকল করে:

এক্সএএমএল-তে আপনার একটি TextBox বক্তব্য রয়েছে:

<TextBox Text="http://www.blabla.com" BorderThickness="2" BorderBrush="Green" VerticalAlignment="Center" Height="25"
                 PreviewMouseLeftButtonDown="SelectAll" />

কোডবাইন্ডে:

private void SelectAll(object sender, MouseButtonEventArgs e)
{
    TextBox tb = (sender as TextBox);

    if (tb == null)
    {
        return;
    }

    if (!tb.IsKeyboardFocusWithin)
    {
        tb.SelectAll();
        e.Handled = true;
        tb.Focus();
    }
}

1
আপনার অ্যাপ্লিকেশনটির চারপাশে যেভাবে তাদের ট্যাব রয়েছে এমন লোকদের জন্য টেক্সটবক্স.সিলেক্টআল () এর ভিতরে একটি গটকিবোর্ডফোকাস ইভেন্ট যুক্ত করতে পারে। আপনার সমাধানটি পাসওয়ার্ডবক্সের পক্ষেও কাজ করে (যেহেতু পাসওয়ার্ডবক্সগুলি সিল করা প্রকারগুলি এগুলি বাড়ানো যায় না)।
ডেভিড শেরেট

1

যে কোনও পাঠ্যবক্স নিয়ন্ত্রণে কাঙ্ক্ষিত আচরণ যুক্ত করতে এই এক্সটেনশন পদ্ধতিটি ব্যবহার করে দেখুন। আমি এখনও এটি ব্যাপকভাবে পরীক্ষা করে দেখিনি, তবে এটি আমার প্রয়োজনীয়তা পূরণ করে বলে মনে হচ্ছে।

public static class TextBoxExtensions
{
    public static void SetupSelectAllOnGotFocus(this TextBox source)
    {
        source.GotFocus += SelectAll;
        source.PreviewMouseLeftButtonDown += SelectivelyIgnoreMouseButton;
    }

    private static void SelectAll(object sender, RoutedEventArgs e)
    {
        var textBox = e.OriginalSource as TextBox;
        if (textBox != null)
            textBox.SelectAll();
    }

    private static void SelectivelyIgnoreMouseButton(object sender, MouseButtonEventArgs e)
    {
        var textBox = (sender as TextBox);
        if (textBox != null)
        {
            if (!textBox.IsKeyboardFocusWithin)
            {
                e.Handled = true;
                textBox.Focus();
            }
        }
    }
}

1

আমি সমাধানের জন্য অনেক অনুসন্ধান করেছি, আমি সিলেক্ট করার কয়েকটি সমাধান পেয়েছি তবে, সমস্যাটি হ'ল আমরা যখন টেক্সট বাক্স থেকে পাঠ্যের অংশটি নির্বাচনের পরে ডান ক্লিক করি এবং কাটা / অনুলিপি করি, এটি এমনকি আমি পাঠ্যের কিছু অংশ নির্বাচন করে selected এটি ঠিক করার জন্য এখানে সমাধান। কীবোর্ড নির্বাচন ইভেন্টে কেবল নীচের কোডটি যুক্ত করুন। এটি আমার পক্ষে কাজ করেছে।

private static void SelectContentsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    if (d is TextBox)
    {
        TextBox textBox = d as TextBox;
        if ((e.NewValue as bool?).GetValueOrDefault(false))
        {
            textBox.GotKeyboardFocus += OnKeyboardFocusSelectText;                 
        }
        else
        {
            textBox.GotKeyboardFocus -= OnKeyboardFocusSelectText;

        }
    }
}


private static void OnKeyboardFocusSelectText(object sender, KeyboardFocusChangedEventArgs e)
{
    if (e.KeyboardDevice.IsKeyDown(Key.Tab))
        ((TextBox)sender).SelectAll();
}

1

আমারও একই সমস্যা ছিল ভিবি.নেটে এটি সেভাবে সহজভাবে কাজ করে:

ভিবি এক্সএএমএল:

<TextBox x:Name="txtFilterFrequency" />

Codehind:

Private Sub txtFilterText_GotFocus(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles txtFilterText.GotFocus
    Me.Dispatcher.BeginInvoke(Sub()
                                  txtFilterText.SelectAll()
                              End Sub, DispatcherPriority.ApplicationIdle, Nothing)
End Sub

সি # (ভাইরুস্ট্রিনিটি আপনাকে ধন্যবাদ)

private delegate void TextBoxSelectAllDelegate(object sender);

private void TextBoxSelectAll(object sender)
{
    (sender as System.Windows.Controls.TextBox).SelectAll();
}

private void MyTextBox_GotFocus(object sender, System.Windows.RoutedEventArgs e)
{
    TextBoxSelectAllDelegate d = TextBoxSelectAll;

    this.Dispatcher.BeginInvoke(d,
        System.Windows.Threading.DispatcherPriority.ApplicationIdle, sender);
}

আমার জন্য সবচেয়ে ভালো সমাধান, আমি একটি সি # অনুবাদ এখানে পোস্ট করেছেন stackoverflow.com/a/48385409/3936440
ViRuSTriNiTy

আমার জন্য, এই পদ্ধতির মাঝে মাঝে পাঠ্য নির্বাচন করতে ব্যর্থ হয়। আমার মনে হয় বিগিনিভোকের কারণে এটি রেসের অবস্থা।
Vimes

নির্ধারন করুন. প্রেরণকারী অগ্রাধিকার প্রত্যাশা অনুযায়ী ডিফল্ট অ্যাপ্লিকেশনগুলিতে কাজ করছে। আপনার অবস্থা কি? আপনি বর্ণিত হিসাবে সঠিক চেষ্টা করেছেন? আপনার সমাধানে বিশেষ কিছু?
নাসেনবায়ের

1

এটি এখন পর্যন্ত সবচেয়ে সহজ সমাধান।

অ্যাপ্লিকেশনটিতে একটি গ্লোবাল হ্যান্ডলার যুক্ত করুন (App.xaml.cs) এবং সম্পন্ন হয়েছে। আপনার কেবল কয়েকটি লাইন কোডের প্রয়োজন হবে।

protected override void OnStartup(StartupEventArgs e)
{
    EventManager.RegisterClassHandler(typeof(TextBox),
        TextBox.GotFocusEvent,
        new RoutedEventHandler(TextBox_GotFocus));

    base.OnStartup(e);
}

সুতরাং ইভেন্ট ম্যানেজার ক্লাসটি কোনও ধরণের (টেক্সটবক্স) বিরুদ্ধে বিশ্বব্যাপী ইভেন্ট হ্যান্ডলারটি নিবন্ধিত করতে ব্যবহার করুন। আসল হ্যান্ডলারটি মারা গেছে সহজ:

private void TextBox_GotFocus(object sender, RoutedEventArgs e)
{
    (sender as TextBox).SelectAll();
}

এখানে চেক করুন: ফোকাসে ডাব্লুপিএফ পাঠ্যবক্স নির্বাচন করুন

আশা করি এটা সাহায্য করবে.


1

ডোনেলে / গ্রোকের পদ্ধতির প্রতি আগ্রহী ব্যক্তিদের জন্য, তবে প্রবেশের পাঠ্যের শেষে ক্যারেটটি রাখার জন্য শেষ চরিত্রের ডানদিকে ক্লিক করুন (তবে এখনও এটির মধ্যে রয়েছে TextBox), আমি এই সমাধানটি নিয়ে এসেছি:

int GetRoundedCharacterIndexFromPoint(TextBox textBox, Point clickedPoint)
{
    int position = textBox.GetCharacterIndexFromPoint(clickedPoint, true);

    // Check if the clicked point is actually closer to the next character
    // or if it exceeds the righmost character in the textbox
    // (in this case return increase the position by 1)
    Rect charLeftEdge = textBox.GetRectFromCharacterIndex(position, false);
    Rect charRightEdge = textBox.GetRectFromCharacterIndex(position, true);
    double charWidth = charRightEdge.X - charLeftEdge.X;
    if (clickedPoint.X + charWidth / 2 > charLeftEdge.X + charWidth) position++;

    return position;
}

void SelectivelyIgnoreMouseButton(object sender, MouseButtonEventArgs e)
{
    // Find the TextBox
    DependencyObject parent = e.OriginalSource as UIElement;
    while (parent != null && !(parent is TextBox))
        parent = VisualTreeHelper.GetParent(parent);

    if (parent != null)
    {
        var textBox = (TextBox)parent;
        if (!textBox.IsKeyboardFocusWithin)
        {
            // If the text box is not yet focused, give it the focus and
            // stop further processing of this click event.
            textBox.Focus();
            e.Handled = true;
        }
        else
        {
            int pos = GetRoundedCharacterIndexFromPoint(textBox, e.GetPosition(textBox));
            textBox.CaretIndex = pos;
        }
    }
}

void SelectAllText(object sender, RoutedEventArgs e)
{
    var textBox = e.OriginalSource as TextBox;
    if (textBox != null)
        textBox.SelectAll();
}

GetRoundedCharacterIndexFromPointপদ্ধতি থেকে নিয়ে যাওয়া হয় এই পোস্ট।


1
দুর্দান্ত কাজ করে তবে ডাবল ক্লিক ইভেন্টটি ট্রিগার হয় না
রদ্রিগো ক্যাবলেরো

প্রকৃতপক্ষে এটি ডাবলিক্লিক ইভেন্টে প্রবেশ করে না তবে মূলস্রোতের সম্পত্তিটি পাঠ্যবক্সভিউ টাইপের iew সুতরাং সিলেক্ট অলটেক্সট পদ্ধতিটি এর মতো হওয়া উচিত: প্রাইভেট স্ট্যাটিক শূন্য সিলেক্ট অলটেক্সট (অবজেক্ট প্রেরক, রাউটেডভেন্টআরস ই) {টেক্সটবক্স = ই.অরিনালসোর্স টেক্সটবক্স হিসাবে; যদি (টেক্সটবক্স! = নাল) {পাঠ্যবক্স.সিলিটএল (); System.Diagnostics.Debug.WriteLine ("সমস্ত নির্বাচিত"); } অন্যথায় যদি (প্রেরক টেক্সটবক্স হয়) {(টেক্সটবক্স হিসাবে প্রেরক)। নির্বাচন করুন সমস্ত (); }
রদ্রিগো ক্যাবলেরো

1

গুগলিং এবং টেস্টিংয়ের পরে, আমি একটি সহজ সমাধান পেয়েছি যা আমার পক্ষে কাজ করে।

Loadedআপনার ধারক উইন্ডোর ইভেন্টে আপনাকে ইভেন্ট হ্যান্ডলার যুক্ত করতে হবে :

private void yourwindow_Loaded(object sender, RoutedEventArgs e)
{
    EventManager.RegisterClassHandler(typeof(TextBox),
        TextBox.PreviewMouseLeftButtonDownEvent,
        new RoutedEventHandler(SelectivelyIgnoreMouseButton));
}

এরপরে, আপনাকে RoutedEventHandlerআগের কোডটিতে রেফারেন্স করতে হ্যান্ডলারটি তৈরি করতে হবে :

private void SelectivelyIgnoreMouseButton(object sender, RoutedEventArgs e)
{
    TextBox tb = (sender as TextBox);
    if (tb != null)
    {
        if (!tb.IsKeyboardFocusWithin)
        {
            e.Handled = true;
            tb.Focus();
        }
    }
}

এখন, আপনি আলাদাভাবে যে কোনও নিয়ন্ত্রণে ইভেন্ট হ্যান্ডলারদের SelectAll()কমান্ডটি যুক্ত করতে পারেন :GotFocusTextBox

private void myTextBox_GotFocus(object sender, RoutedEventArgs e)
{
    (sender as TextBox).SelectAll();
}

আপনার পাঠ্য এখন ফোকাস নির্বাচিত!

ডাঃ ডাব্লুপিএফ সমাধান, এমএসডিএন ফোরাম থেকে গৃহীত Ad


আমি সবেমাত্র ব্যবহার করেছি: প্রাইভেট অ্যাসিঙ্ক শূন্য টিবিটাইম_গটফোকাস (অবজেক্ট প্রেরক, রাউটেড এভেন্টআরস ই) {টেক্সটবক্স টিবি = (টেক্সটবক্স) ই.আরগিনালসোর্স; Dispatcher.RunAsync (Windows.UI.Core.CoreDispatcherPriority.Normal, async () => b tb.SelectAll ();}) এর জন্য অপেক্ষা করুন; }
ডেভিড জোন্স

1
#region TextBoxIDCard selection
private bool textBoxIDCardGotFocus = false;
private void TextBoxIDCard_GotFocus(object sender, RoutedEventArgs e)
{
    this.TextBoxIDCard.SelectAll();
}

private void TextBoxIDCard_LostFocus(object sender, RoutedEventArgs e)
{
    textBoxIDCardGotFocus = false;
}

private void TextBoxIDCard_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    if (textBoxIDCardGotFocus == false)
    {
        e.Handled = true;
        this.TextBoxIDCard.Focus();
        textBoxIDCardGotFocus = true;
    }
} 
#endregion

আপনার যদি একটি উইন্ডোতে 20 টি পাঠ্যবাক্স থাকে, আপনি কি প্রতিটি পাঠ্যবক্সের জন্য 3 টি পদ্ধতি তৈরি করবেন? এই পদ্ধতির ভাল না। এখানে একবার দেখুন: rachel53461.wordpress.com/2011/11/05/…
আলেকজান্দ্রু ডিকু

0

এটি আমার পক্ষে ভাল কাজ করছে বলে মনে হচ্ছে। এটি মূলত কিছু পূর্ববর্তী পোস্টগুলির একটি পুনরুদ্ধার। আমি এটি কেবল কনস্ট্রাক্টরের আমার মেইনওয়াইন্ডো.এক্সএএমএল.সি ফাইলগুলিতে রেখেছি। আমি দুটি হ্যান্ডলার তৈরি করি, একটি কীবোর্ডের জন্য, এবং একটি মাউসের জন্য এবং উভয় ইভেন্টকে একই ফাংশনে ফ্যানেল করি HandleGotFocusEvent, যা একই ফাইলের কনস্ট্রাক্টরের ঠিক পরে সংজ্ঞায়িত করা হয়।

public MainWindow()
{
   InitializeComponent();

   EventManager.RegisterClassHandler(typeof(TextBox), 
      UIElement.GotKeyboardFocusEvent,
      new RoutedEventHandler(HandleGotFocusEvent), true);
   EventManager.RegisterClassHandler(typeof(TextBox),
      UIElement.GotMouseCaptureEvent,
      new RoutedEventHandler(HandleGotFocusEvent), true);   
}
private void HandleGotFocusEvent(object sender, RoutedEventArgs e)
{
   if (sender is TextBox)
      (sender as TextBox).SelectAll();
}

দুর্দান্ত এবং সহজ, তবে সময় মত সমস্যা আছে বলে মনে হচ্ছে - অন্য প্রতিটি চেষ্টা (মাউস ক্লিক), এটি তাত্ক্ষণিকভাবে আবার নির্বাচন করে ...?
T4NK3R

0

মাউসডাউনকে ওভাররাইড করার একটি সহজ উপায় এবং ডাবলক্লিকের পরে সমস্ত নির্বাচন করার উপায়:

public class DoubleClickTextBox: TextBox
{

    public override void EndInit()
    {
        base.EndInit();            
    }

    protected override void OnMouseEnter(System.Windows.Input.MouseEventArgs e)
    {
        base.OnMouseEnter(e);
        this.Cursor = Cursors.Arrow;
    }
    protected override void OnMouseDown(System.Windows.Input.MouseButtonEventArgs e)
    {

    }

    protected override void OnMouseDoubleClick(System.Windows.Input.MouseButtonEventArgs e)
    {
        base.OnMouseDown(e);
        this.SelectAll();
    }
}

0

আপনার পাঠ্যবক্সটি যা নিয়ন্ত্রণ করছে তা নির্মাতাকে এটিকে চেষ্টা করুন:

Loaded += (sender, e) =>
{
    MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
    myTextBox.SelectAll();
}

আপনি যখন উইন্ডো কনস্ট্রাক্টরে রাখেন তখন এই পদ্ধতির কাজ হয় না।
ViRuSTriNiTy

0

যদি এমন কোনও ইভেন্ট থাকে যা OnFocusমাউস আপ চলাকালীন পাঠ্যকে অপসারণ করে তবে আমি সাধারণত সমস্তটি নির্বাচন করতে বিলম্ব করি।

private void TextBox_GotFocus(object sender, RoutedEventArgs e)
{
    if (TextBox.Text != null)
    {
        _ = Task.Run(() =>
        {
            Dispatcher.Invoke(
                async () => {
                    await Task.Delay(100);
                    TextBox.SelectAll();
                }
            );
        });
    }
}

-1

আমি সেগুলি সবগুলি পরীক্ষা করেছি তবে কেবল নিম্নলিখিতগুলি কার্যকর হয়েছিল:

protected override void OnStartup(StartupEventArgs e) 
{
    EventManager.RegisterClassHandler(typeof(TextBox), UIElement.PreviewMouseLeftButtonDownEvent,
   new MouseButtonEventHandler(SelectivelyHandleMouseButton), true);
    EventManager.RegisterClassHandler(typeof(TextBox), UIElement.GotKeyboardFocusEvent,
      new RoutedEventHandler(SelectAllText), true);
    EventManager.RegisterClassHandler(typeof(TextBox), UIElement.GotFocusEvent,
      new RoutedEventHandler(GotFocus), true);          
}

private static void SelectivelyHandleMouseButton(object sender, MouseButtonEventArgs e)
{
    var textbox = (sender as TextBox);
    if (textbox != null)
    {
        int hc = textbox.GetHashCode();
        if (hc == LastHashCode)
        {
            if (e.OriginalSource.GetType().Name == "TextBoxView")
            {
                e.Handled = true;
                textbox.Focus();
                LastHashCode = -1;
            }
        }
    }
    if (textbox != null) textbox.Focus();
}

private static void SelectAllText(object sender, RoutedEventArgs e)
{
    var textBox = e.OriginalSource as TextBox;
    if (textBox != null)
        textBox.SelectAll();
}

private static int LastHashCode;
private static void GotFocus(object sender, RoutedEventArgs e)
{
    var textBox = e.OriginalSource as TextBox;
    if (textBox != null)
        LastHashCode = textBox.GetHashCode();
}

4
এটি হ্যাশ কোডগুলির একটি অশ্লীল অপব্যবহার। আমি এটি পড়তাম, লিঙ্কটি
রিচক

3
এবং এর GetType().Nameপরিবর্তে isবা ব্যবহার asকরা বেশ হ্যাকি
রিচক

-1

আমি দেখতে পাচ্ছি যে প্রচুর উত্তর রয়েছে তবে অনুমোদিত হিসাবে, যে পদ্ধতিগুলি ব্যবহার করা উচিত তা হ'ল EditTextBoxGotCapture

পিছনে নিম্নলিখিত কোড সহ:

private void EditTextBoxGotCapture(object sender, MouseEventArgs e)
{
    if (sender is TextBox tb)
    {
        tb.Select(0, tb.Text.Length);
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.