এন্টার টিপে 'ডিং' থামান


124

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

এই সব ঠিক আছে। তবে আমার ফর্মটিতে আমার কাছে 1 টি পাঠ্যবক্স এবং একটি অনুসন্ধান বোতাম রয়েছে। এবং আমি ব্যবহারকারী তারা সমাপ্ত টাইপিং করেছি পরে লিখুন, যাতে তারা না টিপে একটি সার্চ সঞ্চালন করতে সক্ষম হবেন করছি আছে মাউস ব্যবহার করতে ক্লিক করতে অনুসন্ধান বোতাম।

তবে এই ডিং শব্দটি ঘটে। এটা খুব বিরক্তিকর।

আমার ফর্মটিতে শব্দটি যেভাবে খেলছে না আমরা কীভাবে এটি তৈরি করতে পারি?

@ ডেভিড এইচ - আমি কীভাবে এন্টার টিপতে টিপছি তা সনাক্ত করছি:

private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        // Perform search now.
    }
}

পাঠ্য বাক্সে ফোকাস করার সময় এন্টারটি কীভাবে টিপানো হয়েছে তা আপনি কীভাবে আবিষ্কার করতে পারেন?
ডেভিড হেফারনান

প্রোপার্টি ফলসে, আপনি কীডাউন বা কীআপ ইভেন্টটি ডাবল ক্লিক করুন। তারপরে, কোড ভিউতে, আপনি যে কোডটি লিখতে চলেছেন তা টাইপ করুন যা আমি আপনার প্রশ্নের জন্য করব।
বেন্ডার

2
কীপ্রেস সম্ভবত সঠিক ইভেন্ট এবং আপনি e.Handled = সত্য সেট করতে চান
ডেভিড

আপনাকে ধন্যবাদ, ডেভিড, আমি এটি জানতাম না :)
বেন্ডার

7
আমি আশা করি বিরক্তিকর ডিং দমন করার কোনও উপায় ছিল তবে কী প্রেসটি বুদবুদ হওয়ার অনুমতি দিন। কখনও কখনও একটি কী প্রেস কেবল একটি মূল প্রেস হয়, অ্যালার্মের প্রয়োজন হয় না।
ফ্লিপডাব্ট

উত্তর:


56

ফর্মটি পরীক্ষা করে দেখুন cএসেপ্টবটনের সম্পত্তি। এন্টার টিপে এই ক্ষেত্রে আপনি কোনও ফর্মের জন্য একটি ডিফল্ট বোতাম নির্দিষ্ট করতে এটি ব্যবহার করতে পারেন।

ডক্স থেকে:

ব্যবহারকারী যখন আপনার অ্যাপ্লিকেশনটিতে ENTER কী টিপবে তখন এই সম্পত্তিটি আপনাকে ঘটতে একটি ডিফল্ট ক্রিয়া নির্ধারণ করতে সক্ষম করে। এই বৈশিষ্ট্যের জন্য বরাদ্দ করা বোতামটি অবশ্যই একটি আইবুটনকন্ট্রোল হতে হবে যা বর্তমান ফর্মটিতে রয়েছে বা বর্তমান ফর্মের একটি ধারকের মধ্যে অবস্থিত।

ব্যবহারকারী যখন পালাতে পারে তার জন্য একটি বাতিলবাটন সম্পত্তিও রয়েছে।


1
আপনাকে ধন্যবাদ @ এমডিএম, এটি আমার পক্ষে সবচেয়ে ভাল কাজ করেছে। :) আমি আরও উপস্থাপনা করা হবে যখন আমি upvote ফিরে আসতে হবে।
বেন্ডার

1
@ বেন্ডার আমারও একই সমস্যা আছে .. তবে আমি ইউজারকন্ট্রোল ব্যবহার করছি .. এতে ফর্ম নেই।অ্যাসসেপ্টবটন .. কীভাবে এটি ঠিক করবেন?
মুরহফ সওসালি

1
ভিজ্যুয়াল স্টুডিওর এর জন্য প্রোপার্টি ফলসে কোনও ক্ষেত্র নেই বলে মনে হচ্ছে। এটি কোডে করা উচিত, স্পষ্টতই। this.AcceptButton = buttonOK; this.CancelButton = buttonCancel;
ক্রিস

5
এটি সরঞ্জাম স্ট্রিপবটনের জন্য কাজ করবে না বা আপনি যদি কোনও পাঠ্যবক্স বা সরঞ্জামদৃশ টেক্সটবক্স যাচাই করতে ENTER কী ব্যবহার করতে চান। আরও ভাল পদ্ধতির লুসিও ফোনসিকার উত্তর হতে পারে যা আমার জন্য টুলস্ট্রিপটেক্সটবক্সে কাজ করেছিল।
রবার্ট এস

আমি আপনার সমাধানটি দেখতে পাচ্ছি না যে আপনি আরও আলোকিত হওয়ার জন্য ব্যবহারিক অনুশীলন করবেন না
পেড্রো অ্যাভিলা

198

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

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{

    //Se apertou o enter
    if (e.KeyCode == Keys.Enter)
    {
        //enter key is down

        this.doSomething();

        e.Handled = true;
        e.SuppressKeyPress = true;

     }

 }

সাপ্রেস কেয়ারপ্রেস সত্যিই কৌশল। আমি আশা করি যে আপনি সাহায্য করবে।


30
আমার মতে এটিই একমাত্র বৈধ উত্তর। e.Handled = true;অপর্যাপ্ত ছিল; এটিই SuppressKeyPressসেই কৌশলটি করেছিল।
জোনাথন রাইনহার্ট

12
হ্যান্ডলড বা
সাপ্রেস কেয়ারপ্রেস

4
আমার সাথে কাজ করে ToolStripTextBox.KeyDown। অন্য কোনও সমাধান করেনি। ধন্যবাদ!
রবার্ট এস

1
এটি আমার textboxএবং KeyDownইভেন্টে আমার পক্ষে কার্যকর হয়নি
অ্যালেক্স জলিগ

7
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। বর্তমান গৃহীত উত্তরের জন্য ফর্মের উপর একটি স্ট্যান্ডার্ড বোতাম রাখা দরকার যা অপ্রীতিকর।
জাভিদ

56

চেষ্টা

textBox.KeyPress += new KeyPressEventHandler(keypressed);

private void keypressed(Object o, KeyPressEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        e.Handled = true; //this line will do the trick
    }
}

সঠিক, তবে এটি কেবল তখনই কাজ করবে যদি ফোকাসটি এখনও টেক্সটবক্সে থাকে। ব্যবহারকারী Tabপ্রথমে চাপ দিলে কী হবে ?
এমডিএম

4
@ এমডিএম ইউআই ডিজাইনের উপর নির্ভর করে। পাঠ্য বাক্সে ফোকাস থাকলেই সম্ভবত ওপি এই ক্রিয়াটি চায়। এটা বেশ সাধারণ।
ডেভিড হেফারনান

2
যদি ব্যবহারকারী ট্যাব টিপে থাকে তবে ফোকাসটি আর টেক্সটবক্সের উপরে থাকবে না, পরের কনটোরালটি ফোকাস করা হবে বাটন কন্ট্রোল, এটি যখন আপনি এন্টার টিপুন তখন শব্দটি তৈরি করে না। :-)
বেন্ডার

@ ডেভিড, আপনার উদাহরণের জন্য ধন্যবাদ আমি এটি চেষ্টা করেছিলাম। এবং যখনই আমি । কেপ্রেস ইভেন্টে e.Handled = সত্য রেখেছি, অন্য কোডগুলির মধ্যে কোনওটিই কার্যকর করে না। কেবলমাত্র
ঘটনাই হ'ল পাঠ্যবক্সের

1
লুসিও ফোনসিকার উত্তরটিই ছিল আমি কেবল সেই সমস্যার যত্ন নিতে পেয়েছি।
জোনাথন রাইনহার্ট

15

e.SuppressKeyPress = true;আপনার "যদি" বিবৃতিতে কেবল যুক্ত করুন ।

private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        //If true, do not pass the key event to the underlying control.
        e.SuppressKeyPress = true;  //This will suppress the "ding" sound.*/

        // Perform search now.
    }
}

13

আপনি কীপিস বা কীডাউন এর পরিবর্তে কীপ্রেস ব্যবহার করতে পারেন এটি আরও দক্ষ এবং এটি কীভাবে পরিচালনা করবেন

  private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.Enter)
        {
            e.Handled = true;
            button1.PerformClick();
        }
    }

এবং 'ডিং' কে শান্তি বলুন


2
এটি আমার জন্য পুরোপুরি কাজ করেন। ই। হ্যান্ডলেড দৃশ্যত 'ডিং' অক্ষম করে। 'সাবমিট' বাটনটি (আমার ক্ষেত্রে) তৈরি করা আমার পক্ষে কাজ করবে না কারণ আমি ফর্মের অন্য পাঠ্য বাক্সগুলির জন্য 'এন্টার' কীটি আলাদাভাবে পরিচালনা করতে চেয়েছিলাম <br <br/> <br/> উপায় দ্বারা : এই প্রকল্পের জন্য আমি ভিবি ব্যবহার করছি। সুতরাং e.KeyChar castালার পরিবর্তে, আমি এটিকে রূপান্তর করি: যদি e.KeyChar = ChrW (কীগুলি.ইন্টার পরে ....)
মার্ক

1
এর মধ্যে KeyDown, ব্যবহার করে e.Handledএবং e.SuppressKeyPressআমার পক্ষে কাজ করে না - এখনও ডিঙিং। ই KeyPress' event and হ্যান্ডলড` ব্যবহার করার জন্য এখানে প্রস্তাবিত হিসাবে এটি পরিবর্তন করা খুব সুন্দরভাবে এটি করেছে।
জিন্লি

এটি সঠিক উত্তর হওয়া উচিত, ধন্যবাদ
ফিরাস শ্র্রৌ

7

SuppressKeyPressকীস্ট্রোকটি পরিচালনা করার পরে অবিরত প্রক্রিয়া বন্ধ করতে ব্যবহার করুন ।

public class EntryForm: Form
{
   public EntryForm()
   {
   }

   private void EntryTextBox_KeyDown(object sender, KeyEventArgs e)
   {
      if(e.KeyCode == Keys.Enter)
      {
         e.Handled = true;
         e.SuppressKeyPress = true;
         // do some stuff

      }
      else if(e.KeyCode == Keys.Escape)
      {
          e.Handled = true;
          e.SuppressKeyPress = true;
          // do some stuff

      }
   }

   private void EntryTextBox_KeyUp(object sender, KeyEventArgs e)
   {
      if(e.KeyCode == Keys.Enter)
      {
         // do some stuff

      }
      else if(e.KeyCode == Keys.Escape)
      {
         // do some stuff

      }
   }
}

2

এটি আমার জন্য কাজ করা একটি কীডাউন হ্যান্ডেল করার চেষ্টা করার সময় আমি এই পোস্টে হোঁচট খেয়েছি।

If e.KeyCode = Keys.Enter Then
   e.SuppressKeyPress = True
   btnLogIn.PerformClick()
End If

কী প্রেসের উপর চাপ দেওয়া ঘটনাটিকে অন্তর্নিহিত নিয়ন্ত্রণে প্রেরণ করা থেকে বিরত করে। আপনি যদি পাঠ্যবাক্সের মধ্যে প্রবেশ কীটি যে কাজটি সম্পাদন করে তা ম্যানুয়ালি হ্যান্ডল করে থাকেন তবে এটি কাজ করা উচিত। ভিজ্যুয়াল বেসিক সম্পর্কে দুঃখিত।


2

এই উত্তরটি যে কেউ পেয়ে যাওয়ার খুব কম সুযোগ রয়েছে তবে অন্য কয়েকটি উত্তর সত্যই ভীতিজনক। ইভেন্টটিকে দমন করা KeyDownএক ধর্মঘটে দুটি অতিরিক্ত ইভেন্ট নিহত করে। এই প্রসঙ্গে e.Handledসম্পত্তি সেট trueকরা অকেজো।
সেরা উপায় হ'ল Form.AcceptButtonপ্রকৃত অনুসন্ধান বোতামে সম্পত্তি সেট করা । কী
ব্যবহারের অন্য উপায়ও রয়েছে Enter- কিছু লোক এটি TABবোতাম হিসাবে কাজ করতে চায় । এটি করার জন্য, একটি নতুন যুক্ত করুন Button, এটির Locationবাইরে তার সম্পত্তি নির্ধারণ করুন Form(অর্থাত্ (-100, -100)) - Visibleসম্পত্তি সেট করা কিছু ক্ষেত্রে হ্যান্ডলারের falseঅক্ষম হতে পারে ButtonForm.AcceptButtonআপনার নতুন বোতামে সম্পত্তি সেট করুন । ইন Clickইভেন্ট হ্যান্ডলার নিম্নলিখিত কোড যোগ
this.SelectNextControl(ActiveControl, true, true, true, true)

এখন, আপনি focusকেবল তখনই স্থানান্তর করতে চাইতে পারেন যখন focusএটি আপনার উপর TextBoxহয় পরীক্ষার ActiveControlধরন বা e.Supressইভেন্ট হ্যান্ডলারের নিয়ন্ত্রণ Enterহিসাবে সম্পত্তি হিসাবে TAB এটি ব্যবহার না করে ব্যবহার করতে চাইবে use এমনকি আপনাকে ক্যাপচার করার দরকার নেইe.KeyCode


1
$("#txtSomething").keypress(function (e) {
        if (e.which == 13) {

            e.Handled = true; //This will prevent the "ding" sound

            //Write the rest of your code
        }
    });

এই আমি খুঁজছি।
সিড

1

উইনফর্মগুলিতে এন্টার কীটি একটি ডিং শবুর কারণ ঘটায় ফর্ম সম্পত্তি অ্যাকসেপ্টবটন নির্দিষ্ট করা হয়নি। আপনার যদি অ্যাকসেপ্টবটনের প্রয়োজন না হয় তবে কী-প্রিভিউ রূপটি নির্ধারণ করে নীচের কীপ্রেস ইভেন্টটি প্রবেশ করে ডিং শব্দটি দমন করা যেতে পারে:

private void Form_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == '\r')
        e.Handled = true;
}

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


0

আপনার অনুসন্ধান বোতামের আইসডিফাল্ট সম্পত্তি এতে সেট করুন true। এটি এটিকে একটি ডিফল্ট বোতামে পরিণত করবে এবং এন্টার চাপলে এটি স্বয়ংক্রিয় ক্লিক হবে।


আপনি যে দস্তাবেজগুলির সাথে লিঙ্ক করেছেনTo specify the default button of a form, set the AcceptButton property of the form to the desired button.
এমডিএম

হ্যাঁ, আমি নিজেই এটি তদন্ত করেছি। দেখে মনে হচ্ছে উভয় পন্থাই বিনিময়যোগ্য। AcceptButtonআরও আড়ম্বরপূর্ণ বলে মনে হচ্ছে, তবে আমি IsDefaultনিজের কাছে অভ্যস্ত।
জুনটি

0

ভাল আমি এই সমস্যাটি নিয়ে দীর্ঘকাল বেঁচে ছিলাম এবং এখানে এটি সন্ধান করেছি।

বেশ কিছু সময়ের জন্য এটি সম্পর্কে চিন্তাভাবনা করার পরে এবং এটির সমাধানের সহজতম উপায় চাইবার পরে আমি এটিকে সমাধান করার সহজতম তবে এত মার্জিত উপায় নিয়ে হাজির হয়েছি।

এখানে আমি কি করেছি।

  1. ফর্মটিতে 2 অদৃশ্য বোতাম "Ok" এবং "বাতিল" করুন Put
  2. ফর্মের অ্যাকসেপ্টবটন এবং বাতিল করা বাটন সম্পত্তিটি অদৃশ্য বোতামগুলিতে সেট করুন।
  3. বোতামগুলিতে কোনও কোড যুক্ত হয়নি!

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

মূল প্রশ্ন অনুসারে যেখানে প্রোগ্রামারটি একটি অনুসন্ধান ফাংশন চেয়েছিল যখন এন্ট্রি বোতামটি টিপানো হয়েছিল আমি কেবল সন্ধানের কোডটি অদৃশ্য ওকে বোতামে রেখেছি!

এখনও পর্যন্ত এটি সমস্ত সমস্যার সমাধান বলে মনে হচ্ছে তবে আমরা যেমন ভিজ্যুয়াল স্টুডিওর সাথে জানি, সম্ভবত কিছু ক্রপ হবে।

কেবলমাত্র অন্য সম্ভাব্য মার্জিত উপায় হিসাবে আমি ভাবতে পারি তা হ'ল একটি নতুন কীস্ট্রোক হ্যান্ডলিং ক্লাস লিখি যা আমার বেশিরভাগ প্রকল্পের জন্য অনেক কাজ করার উপায়।


0

আপনি আপনার পাঠ্যবক্সটি বহু-লাইনকে সত্যতে সেট করতে পারেন তারপরে এন্টার কী টিপুন handle

private void yourForm_Load(object sender, EventArgs e)
    {
        textBox1.Multiline = true;
    }

//then write your TextBox codes
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        // doSomething();
    }
}

0

আমি একটি মাল্টলাইন পাঠ্যবক্সের জন্য পাঠ্যবক্সের বৈশিষ্ট্যগুলি পরিবর্তন করেছি এবং এটি আমার পক্ষে কাজ করে।


উত্তর ইতিমধ্যে নীচে 22-ফেবিতে বর্ণিত হয়েছিল।
আপনাকেও

-2
void RTextBox_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyData == Keys.Enter)
    {
        //do ...
        bool temp = Multiline;
        Multiline = true;
        e.Handled = true;
        Multiline = temp;
    }
}

1
এটি কেবল কোড সহ একটি অনর্থক উত্তর, কোনও ব্যাখ্যা নেই। এছাড়াও, Multilineকোডের সমস্ত সম্পূর্ণ অপ্রাসঙ্গিক।
জোনাথন রাইনহার্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.