গ্রুপের কোন রেডিও বোতামটি চেক করা আছে?


118

উইনফোর্ডস ব্যবহার; কোনও গ্রুপের জন্য চেক করা রেডিওবটনটি খুঁজে পাওয়ার আরও ভাল উপায় কী? আমার কাছে মনে হচ্ছে নীচের কোডটি প্রয়োজনীয় হওয়া উচিত নয়। আপনি যখন অন্য কোনও রেডিওবটন পরীক্ষা করেন তখন এটি জানে যে কোনটি চেক করা উচিত নয় ... তাই এটি যা চেক করা আছে তা জানা উচিত। স্টেটমেন্টগুলি (বা একটি স্যুইচ) না করে আমি কীভাবে সেই তথ্যটি টানবো।

     RadioButton rb = null;

     if (m_RadioButton1.Checked == true)
     {
        rb = m_RadioButton1;
     }
     else if (m_RadioButton2.Checked == true)
     {
        rb = m_RadioButton2;
     }
     else if (m_RadioButton3.Checked == true)
     {
        rb = m_RadioButton3;
     }

1
অন্তর্নিহিত কোডটি জানে না কোনটি চেক করা উচিত, এটি কেবল পরিবর্তিত নিয়ন্ত্রণের একই পিতামাতার নীচে সমস্ত রেডিওবটন নিয়ন্ত্রণগুলিকে পুনরাবৃত্তি করে এবং পূর্বে যাচাই করা হয়েছে যাচাই করে।
জোও অ্যাঞ্জেলো

1
আপনি কি উইনফোর্ডস বা এএসপি.নেট ব্যবহার করছেন?
এসএলএক্স

উত্তর:


219

আপনি লিনকিউ ব্যবহার করতে পারেন:

var checkedButton = container.Controls.OfType<RadioButton>()
                                      .FirstOrDefault(r => r.Checked);

নোট করুন যে এর জন্য প্রয়োজনীয় যে সমস্ত রেডিও বোতামগুলি একই পাত্রে সরাসরি থাকে (যেমন, প্যানেল বা ফর্ম), এবং ধারকটিতে কেবল একটি গ্রুপ রয়েছে। যদি এটি না হয় তবে আপনি List<RadioButton>প্রতিটি দলের জন্য আপনার নির্মাতাকে তৈরি করতে পারেন , তারপরে লিখুন list.FirstOrDefault(r => r.Checked)


এটি কি আপনার উত্তরের দ্বিতীয় অনুচ্ছেদে s.FirstOrDefaultপরিবর্তিত হওয়া উচিত list.FirstOrDefault?

@ ফিনিক্স: sএকটি বহুবচন, পরিবর্তনশীল নাম নয়।
স্ল্যাকস 21 '21

দুর্দান্ত উত্তর, কিন্তু ওপির মূল প্রশ্নের উত্তর দেয়নি। আমার উত্তর দেখুন।
ডি'হাগ

আপনার জন্য vb.net ছেলেরা, আমি আপনাকে টেলিরিক কনভার্টারের একটি ট্রিপ সংরক্ষণ করব: ডিম চেকডবটন = র‌্যাড সংযোগ.কন্ট্রোলস fঅফটাইপ (রেডিওবটন) () প্রথম ফার্স্টআরডিফল্ট (ফাংশন (আর) আর। চেকড)
জোশায়েটস 1980

36

আপনি একটি হ্যান্ডলারের বিপরীতে সমস্ত বোতামের চেকড এজেন্টগুলি তারে রাখতে পারেন । সেখানে আপনি সহজেই সঠিক চেকবক্স পেতে পারেন।

// Wire all events into this.
private void AllCheckBoxes_CheckedChanged(Object sender, EventArgs e) {
    // Check of the raiser of the event is a checked Checkbox.
    // Of course we also need to to cast it first.
    if (((RadioButton)sender).Checked) {
        // This is the correct control.
        RadioButton rb = (RadioButton)sender;
    }
}

পরিবর্তে এটি হওয়া উচিত - যদি (((রেডিওবাটন) প্রেরক)। যাচাই করা হয়েছে)
ফ্রাঙ্ক তজানাবিটিস

1
ডাব্লুপিএফ-এর রেডিওবাটনে কোনও চেকড চ্যাঞ্জড নেই যা আপনি এটি কোথা থেকে পেয়েছেন?
মুরহফ সোসালি

26

লিনকিউবিহীনদের জন্য:

RadioButton GetCheckedRadio(Control container)
{
    foreach (var control in container.Controls)
    {
        RadioButton radio = control as RadioButton;

        if (radio != null && radio.Checked)
        {
            return radio;
        }
    }

    return null;
}

12

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

এখানে আমার নিজের কার্য কোডের একটি উদাহরণ। স্বাভাবিক ডাব্লুপিএফ হিসাবে, আমার Gridরেডিওবটনগুলিতে একটি ("মাইগ্রিড" নামে পরিচিত) অন্যান্য ধরণের নিয়ন্ত্রণের গুচ্ছ থাকে। গ্রিডে আমার দুটি ভিন্ন রেডিওবটন গ্রুপ রয়েছে।

একটি নির্দিষ্ট গ্রুপ থেকে চেক করা রেডিওবটন পেতে:

List<RadioButton> radioButtons = myGrid.Children.OfType<RadioButton>().ToList();
RadioButton rbTarget = radioButtons
      .Where(r => r.GroupName == "GroupName" && r.IsChecked)
      .Single();

যদি আপনার কোডে কোনও রেডিওব্যাটনের চেক না হওয়ার সম্ভাবনা থাকে, তবে ব্যবহার করুন SingleOrDefault()(যদি আমি ত্রি-রাষ্ট্রীয় বোতাম ব্যবহার না করে থাকি, তবে আমি সর্বদা একটি ডিফল্ট নির্বাচন হিসাবে "ইসচেকড" বোতামটি সেট করি))


1
r.GroupName == "GroupName" এবং r.IsCeded করা বিভিন্ন ধরণের (বুল এবং বুল?), আপনার r.IsChecked.Value ব্যবহার করা উচিত, যা টাইপ বুলের।
মাইক 16

1
চেষ্টা করুন .Where(r => r.GroupName == "GroupName" && r.IsChecked == true)কারণ r.IsCheckednullable bool সম্পত্তি।
ফিরনাস

মাইগ্রিড এখানে কি উল্লেখ করে?
Unnikrishnan

@ মাইক আপনি এখানে "রেডিওবটন" কি বলতে পারেন?
বেলা সোয়ান

1
@ বেল্লাওয়ান - কোডটি একবার দেখুন - আপনি সমস্ত রেডিও বোতামের একটি তালিকা তৈরি করে এটি একটি ভেরিয়েবলকে বরাদ্দ করেন। এবং তারপরে, একই ভেরিয়েবলের জন্য আপনাকে কোথায় নির্বাচন পরিচালনা করতে হবে এবং এটি rbTarget এ নিয়োগ করতে হবে।
মাইকে


1

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

    public static int GetRadioSelection(this RadioButton rb, int Default = -1) {
        foreach(Control c in  rb.Parent.Controls) {
            RadioButton r = c as RadioButton;
            if(r != null && r.Checked) return Int32.Parse((string)r.Tag);
        }
        return Default;
    }

    public static bool IsRadioSelected(this RadioButton rb) {
        foreach(Control c in  rb.Parent.Controls) {
            RadioButton r = c as RadioButton;
            if(r != null && r.Checked) return true;
        }
        return false;
    }

এখানে একটি সাধারণ ব্যবহারের ধরণ রয়েছে:

if(!MyRadioButton.IsRadioSelected()) {
   MessageBox.Show("No radio selected.");
   return;
}
int selection = MyRadioButton.GetRadioSelection;

1

চেকড চেঞ্জডভেন্ট ওয়্যারিং ছাড়াও কেউ রেডিও বোতামগুলির মধ্যে পার্থক্য করতে নিয়ন্ত্রণগুলি "ট্যাগ" বৈশিষ্ট্যটি ব্যবহার করতে পারে ... একটি (স্প্যাগেটি কোড) বিকল্পটি "ট্যাবআইডেক্স" সম্পত্তি হবে; পি


এর অর্থ আপনি নির্বাচিত রেডিওবোটন আইডিতে (সম্পত্তি সিস্টেমটি ব্যবহার করুন W উইন্ডোস.ফর্মস C কন্ট্রোল.ট্যাগ) দ্রুত স্যুইচ-কেস ব্যবহার করতে পারেন দয়া করে যদি আপনি প্রশ্নের সাথে আমার সংযোজনটি বুঝতে না চান তবে দয়া করে রেটটি ডাউন করবেন না।
বিনকান সেলারিম্যান

1

কখনও কখনও এইরকম পরিস্থিতিতে আমি আমার যৌবনকে মিস করি, যখন অ্যাক্সেস আমার পছন্দের বিষ ছিল এবং আমি একটি গ্রুপের প্রতিটি রেডিও বোতামকে তার নিজস্ব মূল্য দিতে পারি।

সি # তে আমার হ্যাকটি ট্যাগটি মান নির্ধারণের জন্য ব্যবহার করতে হয় এবং আমি যখন গ্রুপ থেকে একটি নির্বাচন করি, তখন আমি নির্বাচিত রেডিওবুটনের ট্যাগটির মান পড়ি। এই উদাহরণে, ডিরেক্টগ্রুপটি এমন একটি গ্রুপ যেখানে আমার চারটি রেডিওব্যাটনের ট্যাগ হিসাবে "নন" এবং "এনই", "এসই", "এনডাব্লু" এবং "এসডাব্লু" সহ চারটি রেডিও বোতাম রয়েছে।

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

  private void ShowSelectedRadioButton()
    {
        List<RadioButton> buttons = new List<RadioButton>();
        string selectedTag = "No selection";
        foreach (Control c in directionGroup.Controls)
        {
            if (c.GetType() == typeof(RadioButton))
            {
                buttons.Add((RadioButton)c);
            }
        }
        var selectedRb = (from rb in buttons where rb.Checked == true select rb).FirstOrDefault();
        if (selectedRb!=null)
        {
             selectedTag = selectedRb.Tag.ToString();
        }

        FormattableString result = $"Selected Radio button tag ={selectedTag}";
        MessageBox.Show(result.ToString());
    }

এফওয়াইআই, আমি এটি আমার কাজটিতে পরীক্ষা করেছি এবং ব্যবহার করেছি।

জোয়ি


কেবলমাত্র 'ফরম্যাটযোগ্য স্ট্রিং' ফলাফল পরিবর্তন করে, আমি আমার প্রোগ্রামটিতে কোডটি ব্যবহার করতে সক্ষম হয়েছি। আমি রেডিওবাটন ট্যাগ সম্পর্কে অবগত ছিলাম না। উত্তরগুলি এইভাবে হওয়া উচিত। দুর্দান্ত স্যার
Unnikrishnan

0

আপনি যদি ফাইলটি বা অন্য কোনওটিতে নির্বাচনটি সংরক্ষণ করতে চান এবং পরে এটি কল করতে চান তবে আমি এখানে কি করি

string[] lines = new string[1];

lines[0]  = groupBoxTes.Controls.OfType<RadioButton>()
            .FirstOrDefault(r => r.Checked).Text;

File.WriteAllLines("Config.ini", lines);

তারপরে এটি কল করুন

string[] ini = File.ReadAllLines("Config.ini");
groupBoxTes.Controls.OfType<RadioButton>()
.FirstOrDefault(r => (r.Text == ini[0])).Checked = true;

0

আপনি যদি একটি নিয়ন্ত্রণের মধ্যে নির্বাচিত রেডিও বোতামের সূচি পেতে চান তবে আপনি এই পদ্ধতিটি ব্যবহার করতে পারেন:

public static int getCheckedRadioButton(Control c)
{
    int i;
    try
    {
        Control.ControlCollection cc = c.Controls;
        for (i = 0; i < cc.Count; i++)
        {
            RadioButton rb = cc[i] as RadioButton;
            if (rb.Checked)
            {
                return i;
            }
        }
    }
    catch
    {
        i = -1;
    }
    return i;
}

উদাহরণ ব্যবহার:

int index = getCheckedRadioButton(panel1);

কোডটি সেভাবে ভালভাবে পরীক্ষিত নয়, তবে মনে হচ্ছে সূচী ক্রমটি কোনও পাঠ্য পড়ার সময় বাম থেকে ডানে এবং নীচে থেকে নীচে রয়েছে। কোনও রেডিও বোতাম পাওয়া না গেলে, পদ্ধতিটি -1 ফিরে আসে।

আপডেট: নিয়ন্ত্রণে কোনও রেডিও বোতাম না থাকলে এটি আমার প্রথম চেষ্টাটি কাজ করে নি। আমি এটির সমাধানের জন্য একটি চেষ্টা এবং ক্যাপ ব্লক যুক্ত করেছি এবং পদ্ধতিটি এখন কাজ করছে বলে মনে হচ্ছে।


0

আপনি যদি উইনফর্মগুলি ব্যবহার করে থাকেন তবে গ্রুপবক্সের এই উদ্দেশ্যে একটি বৈধতাযুক্ত ইভেন্ট রয়েছে।

private void grpBox_Validated(object sender, EventArgs e)
    {
        GroupBox g = sender as GroupBox;
        var a = from RadioButton r in g.Controls
                 where r.Checked == true select r.Name;
        strChecked = a.First();
     }

0

VB.NET ব্যবহার করে বিকাশকারীদের জন্য


Private Function GetCheckedRadio(container) As RadioButton
    For Each control In container.Children
        Dim radio As RadioButton = TryCast(control, RadioButton)

        If radio IsNot Nothing AndAlso radio.IsChecked Then
            Return radio
        End If
    Next

    Return Nothing
End Function
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.