วิธีการวางโฟกัสในกล่องข้อความเมื่อโหลดแบบฟอร์ม?


156

ฉันมีในกล่องข้อความโปรแกรม C #

ฉันต้องการมันเมื่อโปรแกรมเริ่มทำงานโฟกัสจะอยู่บนกล่องข้อความ

ฉันลองสิ่งนี้ใน Form_Load:

MyTextBox.Focus();

แต่มันจะไม่ทำงาน

คำตอบ:


341

ตั้งค่าActiveControlคุณสมบัติของแบบฟอร์มและคุณควรจะปรับ

this.ActiveControl = yourtextboxname;

1
ComboBoxฉันพยายามนี้ แต่มันก็ไม่ได้ผลเช่นกัน!
Alex Jolig

1
ขอบคุณสิ่งนี้ใช้ได้สำหรับฉันที่ทุกอย่างไม่ได้ทำ ไม่แน่ใจว่าทำไม Tab Index = 0 ไม่ทำงาน แต่อาจมีคำสั่งแปลก ๆ เกิดขึ้นในขณะที่โหลดฟอร์ม / กล่องโต้ตอบแสดง
David Carrigan

1
ลองวิธีนี้ >>> this.ActiveControl = yourtextboxname.Control;
Polamin Singhasuwich

3
มันใช้งานได้ดี แต่ทำไมมันถึงไม่MyTextBox.Focus();ทำงาน - มันก็ใช้ได้ดีเมื่อโปรแกรมทำงาน
Levon

2
เขียนthis.ActiveControl = textBox1;ทุกคนเข้าใจความหมายของ "textBox1" "youttextboxname" ดูเหมือน... = "MyTextBox";
Bitterblue

25

ตรวจสอบลำดับแท็บของคุณและตรวจสอบให้แน่ใจว่ากล่องข้อความถูกตั้งค่าเป็นศูนย์


การทำงาน หรือเพียงแค่ Tabindex เพื่อเป็นองค์ประกอบแรกของเคอร์เซอร์ "focusable" ในแบบฟอร์ม
apincik

15

คุณสามารถลอง:

MyTextBox.Select ();

ตามเอกสาร:

เมธอด Select จะเปิดใช้งานการควบคุมหากบิตสไตล์ที่เลือกได้ของตัวควบคุมถูกตั้งค่าเป็นจริงใน ControlStyles ซึ่งมีอยู่ในตัวควบคุมอื่นและตัวควบคุมหลักทั้งหมดสามารถมองเห็นและเปิดใช้งานได้

คุณสามารถตรวจสอบก่อนว่าตัวควบคุมสามารถเลือกได้หรือไม่โดยการตรวจสอบคุณสมบัติMyTextBox.CanSelect


15

คุณไม่สามารถตั้งโฟกัสให้กับตัวควบคุมได้หากยังไม่ได้แสดงผล Form.Load () เกิดขึ้นก่อนที่จะแสดงผลการควบคุม

ไปที่กิจกรรมของแบบฟอร์มและดับเบิลคลิกที่เหตุการณ์ "แสดง" ในตัวจัดการเหตุการณ์ที่แสดงของฟอร์มเรียกเมธอด control.Focus ()

    private void myForm_Shown(object sender, EventArgs e)
    {
        // Call textbox's focus method
        txtMyTextbox.Focus();
    }

12

ถ้าคุณเพียงต้องการที่จะตั้งค่าการโฟกัสเป็นครั้งแรกในรูปแบบการแสดงพยายามจัดการForm.Shownเหตุการณ์และทำมันมี มิฉะนั้นใช้Control.VisibleChanged


6

Textbox.Focus()"พยายาม" เพื่อกำหนดโฟกัสไปที่องค์ประกอบกล่องข้อความ ในกรณีที่องค์ประกอบการมองเห็นถูกซ่อนไว้Focus()จะไม่ทำงาน Focus()เพื่อให้แน่ใจว่าองค์ประกอบของคุณจะปรากฏก่อนที่จะเรียก


5

เหตุผลที่คุณไม่สามารถทำงานให้เป็นเพราะ Loadมีการเรียกเหตุการณ์ก่อนที่แบบฟอร์มจะถูกวาดหรือแสดงผล

มันเหมือนกับบอกสถานที่เกี่ยวกับวิธีทำพิซซ่าของคุณแล้วขอให้พวกเขาส่งรูปของเป็ปเปอร์โรนีไปที่พิซซ่าของคุณก่อนที่พวกเขาจะทำ

using System;
using System.Windows.Forms;

namespace Testing
{
    public partial class TestForm : Form
    {
        public TestForm()
        {
            InitializeComponent();

            Load += TestForm_Load;

            VisibleChanged += TestForm_VisibleChanged;

            Shown += TestForm_Shown;

            Show();

        }

        private void TestForm_Load(object sender, EventArgs e)
        {
            MessageBox.Show("This event is called before the form is rendered.");
        }

        private void TestForm_VisibleChanged(object sender, EventArgs e)
        {
            MessageBox.Show("This event is called before the form is rendered.");
        }

        private void TestForm_Shown(object sender, EventArgs e)
        {
            MessageBox.Show("This event is called after the form is rendered.");
            txtFirstName.Focus();
        }
    }
}

4

ฉันแก้ไขปัญหาด้วยการเปลี่ยนคุณสมบัติ "TabIndex" ของ TextBox ฉันตั้งค่า 0 สำหรับกล่องข้อความที่ฉันต้องการโฟกัสบนฟอร์มเมื่อโปรแกรมเริ่มทำงาน



3

ตั้งค่าคุณสมบัติแท็บดัชนี = 0 และเขียนฟังก์ชั่นโหลดแบบฟอร์ม:

YourTextboxName.Focus();

มันจะทำงาน.


2

คุณสามารถใช้อย่างใดอย่างหนึ่งtextBox1.select();หรือTabIndexในการตั้งค่ากล่องข้อความ TabIndex=0มุ่งเน้นก่อน


ถ้าเราเรียก textBox1.select (); ในตัวจัดการเหตุการณ์การโหลดแบบฟอร์มมันกำหนดโฟกัสใน textBox1
Tushar R.

1

ตั้งค่า Tabstop เป็น True และ TabIndex เป็นค่าต่ำสุดไปยังส่วนควบคุมที่คุณต้องการโฟกัส

เช่นหากคุณมี 2 TextBoxes: TextBox1 และ TextBox2 ให้ตั้ง Tabstop เป็น True สำหรับทั้ง TabIndex เป็น 0 และ 1 ตามลำดับ เมื่อโหลดแบบฟอร์มโฟกัสจะอยู่ที่ TextBox1 และเมื่อกดปุ่ม 'Tab' โฟกัสจะถูกย้ายไปที่ TextBox2


1

ในแบบฟอร์มของคุณไปที่คุณสมบัติและตรวจสอบให้แน่ใจว่าคุณสมบัติ "TopMost" ถูกตั้งค่าเป็นจริงซึ่งจะช่วยแก้ปัญหาของคุณ



0

ในที่สุดฉันก็พบปัญหาที่ฉันใช้เฟรมเวิร์กเมโทรและโซลูชันทั้งหมดของคุณจะไม่ทำงานกับ metroTextBox และโซลูชันทั้งหมดของคุณจะทำงานกับ textBox ปกติในการโหลดแสดง show_change เหตุการณ์แม้แต่ดัชนีแท็บ = 0 นั้นถูกต้อง

   // private void Form1_VisibleChanged(object sender, EventArgs e)
   // private void Form1__Shown(object sender, EventArgs e)
    private void Form1_Load(object sender, EventArgs e)
    {

        textBox1.Select();
        this.ActiveControl=textBox1;
        textBox1.Focus();
    }

-5

ในชุดโฟกัส jquery

$(function() {
  $("#txtBox1").focus();
});

หรือใน Javascript คุณสามารถทำได้

window.onload = function() {
  document.getElementById("txtBox1").focus();
};

4
นี้อาจจะเป็นคำตอบที่ดีสำหรับคำถามเว็บไซต์ แต่คนนี้คือแท็กและc# winforms
Ben Voigt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.