এক ফর্ম থেকে অন্য আকারে মান প্রেরণ করুন


85

আমি দুটি ফর্ম (সি #) এর মধ্যে মানগুলি পাস করতে চাই। আমি এটা কিভাবে করবো?

আমার দুটি ফর্ম রয়েছে: ফর্ম 1 এবং ফর্ম 2।

ফর্ম 1 এ একটি বোতাম রয়েছে। আমি যখন সেই বোতামটিতে ক্লিক করি, ফর্ম 2টি খুলতে হবে এবং ফর্ম 1টি নিষ্ক্রিয় মোডে থাকা উচিত (যেমন নির্বাচনযোগ্য নয়)।

ফর্ম 2 এ একটি পাঠ্য বাক্স এবং একটি জমা দেওয়ার বোতাম রয়েছে। আমি যখন ফর্ম 2 এর পাঠ্য বাক্সে কোনও বার্তা টাইপ করি এবং জমা বোতামটি ক্লিক করি, ফর্ম 2টি বন্ধ হওয়া উচিত এবং ফর্ম 1 এর জমা দেওয়া মান সহ হাইলাইট করা উচিত।

আমি এটা কিভাবে করবো? কেউ আমাকে একটি সাধারণ উদাহরণ দিয়ে এটি করতে সহায়তা করতে পারে?


আপনি কি এর জন্য কোনও উদাহরণ পেয়েছেন?
মিলার

উত্তর:


58

এটির বেশ কয়েকটি সমাধান রয়েছে তবে এটি ব্যবহার করার প্রবণতা।

// Form 1
// inside the button click event
using(Form2 form2 = new Form2()) 
{
    if(form2.ShowDialog() == DialogResult.OK) 
    {
        someControlOnForm1.Text = form2.TheValue;
    }
}

এবং...

// Inside Form2
// Create a public property to serve the value
public string TheValue 
{
    get { return someTextBoxOnForm2.Text; }
}

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

ঠিক আছে, আমি এটি খারাপ "আচরণ" বলে মনে করি না, তবে এই প্যাটার্নটি ব্যবহারের আগে বিবেচনা করার জন্য সুরক্ষা জড়িত রয়েছে। (তবে, দুর্দান্ত সাধারণ উদাহরণ +1)

4
এছাড়াও ভুলে যাবেন না যে আপনারও ফর্ম 2 এর পরিবর্তে ফর্ম 2 এ থাকা দরকার C বন্ধ (); "ডায়ালগআরসাল্ট = ডায়ালগআরসাল্ট.ওকে ব্যবহার করুন;" অথবা এটি ফর্মটি খোলা ছিল তা সনাক্ত করবে না।
বুর্গো 855

39
private void button1_Click(object sender, EventArgs e)
{
        Form2 frm2 = new Form2(textBox1.Text);
        frm2.Show();    
}

 public Form2(string qs)
    {
        InitializeComponent();
        textBox1.Text = qs;

    }

4
আমি এই কোডটি পরীক্ষা করেছি, যদি আমরা public Form2(string qs):this(){}ফর্ম 2 এর ডিফল্ট কনস্ট্রাক্টরকে কল না করি তবে ফর্মটি ভাল প্রদর্শিত হবে না।
পুনর্বার

এই বিকল্পটি আমি ব্যবহার করেছি এবং এটি আমার পক্ষে ঠিক কাজ করেছে!
স্যামন

14

একটি সম্পত্তি সংজ্ঞায়িত করুন

public static class ControlID {  
    public static string TextData { get; set; }
}

মধ্যে form2

private void button1_Click(object sender, EventArgs e)
{  
    ControlID.TextData = txtTextData.Text;   
}

ডাটা পথ form1এবংform3

private void button1_Click(object sender, EventArgs e)
{   
    string text=  ControlID.TextData;   
}

6

এক ফর্ম থেকে অন্য ফর্মটিতে ডেটা পাস করার জন্য একাধিক লড়াইয়ের পরে অবশেষে আমি একটি স্থিতিশীল উত্তর পেয়েছি। এটি কবজ মত কাজ করে।

আপনাকে যা করতে হবে তা হ'ল একটি public static datatype 'variableName'ফর্মের মতো একটি ভেরিয়েবল ঘোষণা করা এবং এই ভেরিয়েবলটির মান নির্ধারণ করুন যা আপনি অন্য ফর্মটিতে যেতে চান এবং সরাসরি ফর্মের নামটি ব্যবহার করে এই ভেরিয়েবলটিকে অন্য ফর্মটিতে কল করতে চান ( এই ফর্মটির অবজেক্টটি তৈরি করবেন না) স্ট্যাটিক ভেরিয়েবলগুলি সরাসরি অ্যাক্সেস করা যায় ) এবং এই পরিবর্তনশীল মানটি অ্যাক্সেস করতে পারে

এর উদাহরণ হ'ল,

আবেদনপত্র 1

public static int quantity;
quantity=TextBox1.text; \\Value which you want to pass

ফর্ম 2

TextBox2.Text=Form1.quantity;\\ Data will be placed in TextBox2

4
এই পদ্ধতির বিষয়টি হ'ল যদি আপনার একাধিক ফর্ম 1 খোলা থাকে তবে তারা "পরিমাণ" মানটি ওভাররাইড করে। এবং আপনার ফর্ম 2 সর্বশেষ খোলার ফর্ম 1 এর মান পায়।
আরশ আওলারা

4

এর মধ্যে একটি সর্বজনীন স্ট্রিং ঘোষণা করুন form1

public string getdata;

এর বোতামে form1

form2 frm= new form2();
this.hide();
form2.show();

form1আপনাকে ডেটা প্রেরণ করতে আপনি সেই ইভেন্টে নিম্নলিখিত কোনও ইভেন্ট এবং কোড চেষ্টা করতে পারেন

form1 frm= new form1();
form1.getdata="some string to be sent to form1";

এখন বন্ধ হয়ে form2এবং খোলার পরে form1, আপনি getdataস্ট্রিংয়ে ফিরে ডেটা ব্যবহার করতে পারেন ।


আমি এবং আমার ফর্মগুলিতে আপনার পরামর্শ অনুসারে একই কাজ করছি তবে আমি যে বিষয়টি পাচ্ছি তা হ'ল যতক্ষণ আমি আবার পুশ বোতামটি চাপছি ততক্ষণ ফেরতের মান পাঠ্য ক্ষেত্রে প্রদর্শিত হবে না।
wsDev

3

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

আমি আমার অ্যাপ্লিকেশনগুলির জন্য সিএবি ব্যবহার করেছি, এটিতে একটি ইভেন্টিং সিস্টেম রয়েছে তবে এটি আপনার ক্ষেত্রে একটি ওভারকিল হতে পারে :) আপনি সহজ অ্যাপ্লিকেশনগুলির জন্য নিজের ইভেন্ট লিখতে পারেন


ইভেন্টগুলির জন্য +1, তারা দুর্দান্তভাবে স্কেল করে। তবে আপনি আসলে মানগুলি কোথায় রাখবেন? একটি স্ট্যাটিক শ্রেণি যথেষ্ট সহজ, তবে এটি একটি বিশ্বব্যাপী পরিবর্তনশীল ব্যবহারের কাছাকাছি, এটি মনে হয় ... আইকি। এর সাথে সম্পর্কিত সেটিংগুলির জন্য কি প্রতিটি ফর্মের নিজস্ব স্থানীয় পরিবর্তনশীল আছে?

2

ফর্ম 1 পাবলিক স্ট্রিংয়ে টেক্সটবক্সস্ট্রিংয়ের স্ট্রিং ঘোষণা করুন;

ফর্ম 1 ক্লিক ইভেন্ট এড

private void button1_Click(object sender, EventArgs e)
    {
        Form1 newform = new Form1();
        newform = this;
        this.Hide();
        MySecform = new Form2(ref newform);
        MySecform.Show();
    }

form2 নির্মাণকারী মধ্যে

public Form2(ref Form1 form1handel)
    {
        firstformRef = form1handel;
        InitializeComponent();
    }

form2 ক্রেট পরিবর্তনশীল ফর্ম 1 ফার্স্টফর্মআরফ;

private void Submitt_Click(object sender, EventArgs e)
    {
        firstformRef.TextBoxString = textBox1.Text;
        this.Close();
        firstformRef.Show();

    }

নতুন কেন তৈরি করবেন Form1? কেন কনস্ট্রাক্টরের thisকাছে পাস হবে না Form2?

2

ফর্ম 1 কোড:

private void button1_Click(object sender, EventArgs e)
{
            Form2 f2 = new Form2();
            f2.ShowDialog();
            MessageBox.Show("Form1 Message :"+Form2.t.Text); //can put label also in form 1 to show the value got from form2
}

ফর্ম 2 কোড:

        public Form2()
        {
            InitializeComponent();
            t = textBox1;                        //Initialize with static textbox
        }
        public static TextBox t=new TextBox();   //make static to get the same value as inserted
        private void button1_Click(object sender, EventArgs e)
        {

            this.Close();

        }

এটি কাজ করে!


2

এই কোডটিতে, আপনি ফর্ম 2 এ একটি পাঠ্য পাস করুন। ফর্ম 2 পাঠ্যবক্স 1 এ সেই পাঠ্যটি দেখায়। ব্যবহারকারী পাঠ্যবক্স 1 এ নতুন পাঠ্য টাইপ করে এবং সাবমিট বাটন টিপুন। ফর্ম 1 সেই পাঠ্যটিকে আঁকড়ে ধরে ফর্মাল 1 এর একটি পাঠ্যবক্সে দেখায়।

public class Form2 : Form
{
    private string oldText;

    public Form2(string newText):this()
    {
        oldText = newText;
        btnSubmit.DialogResult = DialogResult.OK;
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        textBox1.Text = oldText;
    }

    public string getText()
    {
        return textBox1.Text;
    }

    private void textBox1_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            DialogResult = System.Windows.Forms.DialogResult.OK;
        }
    }
}

এবং এটি ফর্ম 1 কোড:

public class Form1:Form
{
    using (Form2 dialogForm = new Form2("old text to show in Form2"))
    {
        DialogResult dr = dialogForm.ShowDialog(this);
        if (dr == DialogResult.OK)
        {
            tbSubmittedText = dialogForm.getText();
        }
        dialogForm.Close();
    }
}

2

ঠিক Form1আছে এর একটি পাঠ্যবাক্স রয়েছে, প্রথমে আপনাকে এই Form1পাঠ্যবক্সটি পাঠ্যবক্সের সম্পত্তিতে সর্বজনীনতে সেট করতে হবে।

কোড ফর্ম 1:

Public button1_click()
{
    Form2 secondForm = new Form2(this);
    secondForm.Show();
}

Form1হিসাবে পাসthisকনস্ট্রাক্টরের ।

কোড ফর্ম 2:

Private Form1 _firstForm;

Public Form2(Form1 firstForm)
{
    _firstForm = firstForm:
}

Public button_click()
{
    _firstForm.textBox.text=label1.text;
    This.Close();
}

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

1

আপনি ফর্ম 1 এর পাঠ্যবক্স হিসাবে এইভাবে পাস করতে পারেন:

ফর্ম 1 বোতাম হ্যান্ডলারটিতে:

private void button2_Click(object sender, EventArgs e)
{
Form2 newWindow = new Form2(textBoxForReturnValue);
newWindow.Show(); 
}

ফর্ম 2 এ

public static TextBox textBox2; // class atribute

public Form2(TextBox textBoxForReturnValue)
{
    textBox2= textBoxForReturnValue;
}

private void btnClose_Click(object sender, EventArgs e)
{

    textBox2.Text = dataGridView1.CurrentCell.Value.ToString().Trim();
    this.Close();
}

1

আপনি এটি করতে পারেন ফর্ম বা গুই অবজেক্টের মধ্যে ডেটা পাস করার জন্য কনস্ট্রাক্টররা সেরা উপায়। ফর্ম 1 ক্লিক বোতামে আপনার থাকা উচিত:

Form1.Enable = false;
Form2 f = new Form2();
f.ShowDialog();

ফর্ম 2-এ, যখন ব্যবহারকারী বোতামটি ক্লিক করে থাকে তখন এর মতো বা অনুরূপ একটি কোড থাকা উচিত:

this.Close();
Form1 form = new Form1(textBox1.Text)
form.Show();

ফর্ম 1 এর ফর্ম লোডের ভিতরে একবার আপনি কন্সট্রাক্টরের কাছ থেকে মান পেয়ে যা কিছু করতে কোড যুক্ত করতে পারেন।


ধন্যবাদ এটি আমার কাছে সবচেয়ে বেশি অর্থবোধ করে। আমি এই পৃষ্ঠায় অন্য সমস্ত কিছুর চেষ্টা করেছি এবং এটিই কেবল কাজ করেছিল!
Chud37

0

ফর্ম থেকে অন্য রূপে মানগুলি কীভাবে পাস করবেন

1.) গোটো ফর্ম 2 তারপর এটিতে ডাবল ক্লিক করুন। কোড এ টাইপ করুন।

public Form2(string v)
{
  InitializeComponent();
  textBox1.Text = v;
}

২) গোটো ফর্ম 1 তারপরে এটিতে ডাবল ক্লিক করুন। কোড এ টাইপ করুন। // ফর্ম 1 এ আপনার কমান্ড বোতামে

private void button1_Click(object sender, EventArgs e)
{
   Form2 F2 = new Form2(textBox1.Text);
   F2.Show();
}

0

এটি খুব সহজ। ধরুন আপনার কাছে দুটি উইন্ডো ফর্ম ফর্ম 1 এবং ফর্ম 2 রয়েছে এবং আপনি ফর্ম 1 থেকে ফর্ম 2 তে টেক্সটবক্স 1 রেকর্ডটি প্রেরণ করতে চান এবং এই রেকর্ডটি ফর্ম 2 এর লেবেল 1 তে প্রদর্শন করতে চান; তারপরে ফর্ম 2 এ একটি লেবেল তৈরি করুন যার নাম লেবেল 1 এবং লেবেল 1 এর সম্পত্তিটিতে যান এবং 'মোডিফায়ার্স' = সর্বজনীন সেট করুন এবং একটি ফর্মের মধ্যে আইডি টেক্সটবক্স 1 এবং নামের একটি বোতাম সহ একটি পাঠ্যবক্স তৈরি করুন জমা দিন তারপরে বোতাম ক্লিক ইভেন্টে নিম্নলিখিত কোডটি লিখুন

button1_Click(object sender, EventArgs e)
{
  Form2 obj=new Form2();
  obj.label1.text=textBox1.text.ToString();
  obj.show();
}

এটি হ'ল ... এইভাবে আপনি অন্য ফর্মের ডেটাগ্রিডভিউতে ডেটাসেট রেকর্ডকে বাঁধতে পারেন ......


0

আপনি চাইলে আলাদা পদ্ধতির ব্যবহার করতে পারেন।

  1. সিস্টেম.অ্যাকশন ব্যবহার করে (এখানে আপনি কেবল কলব্যাক ফাংশনের মতো শিশু ফর্মের পরামিতি হিসাবে প্রধান ফর্মগুলি ফাংশনটি দিয়ে যান)
  2. ওপেনফর্ম পদ্ধতি (আপনি সরাসরি আপনার খোলা ফর্মগুলির একটিতে কল করুন)

System.Action ব্যবহার করে

আপনি শিশু ফর্মটিতে কলব্যাক ফাংশনটি পাঠিয়েছেন বলে আপনি এটি ভাবতে পারেন।

// -------- IN THE MAIN FORM --------

// CALLING THE CHILD FORM IN YOUR CODE LOOKS LIKE THIS
Options frmOptions = new Options(UpdateSettings);
frmOptions.Show();

// YOUR FUNCTION IN THE MAIN FORM TO BE EXECUTED
public void UpdateSettings(string data)
{
   // DO YOUR STUFF HERE
}

// -------- IN THE CHILD FORM --------

Action<string> UpdateSettings = null;

// IN THE CHILD FORMS CONSTRUCTOR
public Options(Action<string> UpdateSettings)
{
    InitializeComponent();
    this.UpdateSettings = UpdateSettings;
}

private void btnUpdate_Click(object sender, EventArgs e)
{
    // CALLING THE CALLBACK FUNCTION
    if (UpdateSettings != null)
        UpdateSettings("some data");
}

ওপেনফর্ম পদ্ধতি od

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

Main frmMain = (Main)Application.OpenForms["Main"];
frmMain.UpdateSettings("Some data");

আমি আমার অনুরূপ প্রশ্নের উত্তর এখানে দিয়েছি


0

আপনি এটি ব্যবহার করতে পারেন;

ফর্ম 1 বোতাম 1 ক্লিক করুন

private void button1_Click(object sender, EventArgs e)
{
    Form2 frm2 = new Form2();
    this.Hide();
    frm2.Show();
}

এবং এটি ফর্ম 2 এ যুক্ত করুন

public string info = "";

ফর্ম 2 বোতাম 1 ক্লিক করুন

private void button1_Click(object sender, EventArgs e)
{

    info = textBox1.Text;
    this.Hide();
    BeginInvoke(new MethodInvoker(() =>
    {
        Gogo();
    }));
}

public void Gogo()
{
    Form1 frm = new Form1();
    frm.Show();
    frm.Text = info;
}

0

আপনি যদি কোনও ফর্মের কোনও নিয়ন্ত্রণের সম্পত্তি পরিবর্তক হিসাবে সর্বজনীন রূপে পরিবর্তন করেন তবে অন্য ফর্মগুলি সেই নিয়ন্ত্রণটিতে অ্যাক্সেস করতে পারে। ফে:

    Form2 frm;
    private void Form1_Load(object sender, EventArgs e)
    {
        frm = new Form2();
        frm.Show();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show(frm.txtUserName.Text); 
        //txtUserName is a TextBox with Modifiers=Public        
    }

-1

জনসাধারণের ইভেন্ট ব্যবহার সম্পর্কে কীভাবে

আমি এটি এইভাবে করতে হবে।

public class Form2
{
   public event Action<string> SomethingCompleted;

   private void Submit_Click(object sender, EventArgs e)
   {
       SomethingCompleted?.Invoke(txtData.Text);
       this.Close();
   }
}

এবং এটিকে ফর্ম 1 থেকে কল করুন।

private void btnOpenForm2_Click(object sender, EventArgs e)
{
    using (var frm = new Form2())
    {
        frm.SomethingCompleted += text => {
            this.txtData.Text = text;
        };

        frm.ShowDialog();
    }
}

তারপরে, ফর্ম 2 বন্ধ হয়ে গেলে ফর্ম 1 ফর্ম 2 থেকে একটি পাঠ্য পেতে পারে

ধন্যবাদ.


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