PDA

View Full Version : سوال: ارسال پارامتر از فرم به فرم در winforms



vlc_vb
جمعه 19 خرداد 1396, 19:18 عصر
در یک فرم دتیاگرید دارم که مشخصات چک های بانکی رو نشون میده بعد از دبل کلیک روی یک سطر باید در یک فرم دیگه اطلاعات چک برای اینکه بشه ویرایشش کرد نمایش داده بشه.
برای ارسال پارامتر روش های مختلف رو امتحان کردم اما ارسال رو باید برعکس انجام بدم.؟؟؟
برای ارسال پارامتر از فرم لیست چک ها باید اول فرم مشخصات چک رو باز کنم در فرم لود فرم لیست چک رو باز کنم و بعد از انتخاب تازه میتونم پاارمتر رو ارسال کنم .
روش درست این کار چیه خیلی سرچ کردم ولی راه حل درست رو پیدا نکردم؟؟؟؟:عصبانی++:
فرم مشخصات چک

private void CheckIssuedCud_Load(object sender, EventArgs e)
{
var ckis = new ListCheckIssued();
ckis.ShowDialog();
if (ckis.CurrentName.Trim().Length < 1)
return;
var dbs = _stg.PD_CheckIssued(int.Parse(ckis.Currentckis)).F irstOrDefault();
DtpDate.Value = dbs.DateIssued;
DtpDueDate.Value = dbs.DueDate;
TxtPayTo.Text = dbs.PayTo;
TxtSerial.Text = dbs.Serial.ToString();
TxtAmount.Text = dbs.Amount.ToString();
DrdType.SelectedValue = dbs.TpCkIssId;
}


فرم لیست چک


public string Currentckis { get; set; } = string.Empty;
public string CurrentName { get; set; } = string.Empty;

private void DgvChekIssued_CellDoubleClick(object sender, GridViewCellEventArgs e)
{
Currentckis = DgvChekIssued.CurrentRow.Cells[1].Value.ToString();
CurrentName = DgvChekIssued.CurrentRow.Cells[3].Value.ToString();
Close();
}

ژیار رحیمی
جمعه 19 خرداد 1396, 23:51 عصر
سلام
از طریق سازنده کلاس فرم میتوانی مقادیر را پاس کنی

private string _currentckis ;
private string _currentName ;
public frmEditCheque(string currentckis,string currentName)
{
_currentckis=currentckis;
_currentName=currentName;
}
private void frmEditCheque_Load(object sender, EventArgs e)
{
if(int.Parse(_currentckis<=0))return;
var dbs = _stg.PD_CheckIssued(int.Parse(_currentckis)).First OrDefault();
DtpDate.Value = dbs.DateIssued;
DtpDueDate.Value = dbs.DueDate;
TxtPayTo.Text = dbs.PayTo;
TxtSerial.Text = dbs.Serial.ToString();
TxtAmount.Text = dbs.Amount.ToString();
DrdType.SelectedValue = dbs.TpCkIssId;
}
///////////////////////////////////////////////////////////////////////////////
//frmChequeList
private void DgvChekIssued_CellDoubleClick(object sender, GridViewCellEventArgs e)
{
Currentckis = DgvChekIssued.CurrentRow.Cells[1].Value.ToString();
CurrentName = DgvChekIssued.CurrentRow.Cells[3].Value.ToString();
new frmEditCheque(Currentckis,CurrentName).ShowDialog( );
//Close();
}

_behnam_
جمعه 19 خرداد 1396, 23:52 عصر
سلام. میتونید به شکل زیر انجام بدید.
وقتی یک فرم رو به صورت دیالوگ باز میکنید هنگام بسته شدن باید DialogResult رو مشخص کنید.
فرم اول

private void FormOne_Load(object sender, EventArgs e)
{
var formTow = new FormTwo();
if (formTow.ShowDialog() == DialogResult.OK)
{
MessageBox.Show(formTow.YourName);
}
else
{
MessageBox.Show("FromTow Error !");
}
}
فرم دوم
public string YourName { get; set; }
private void btnSelectName_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
YourName = txtYourName.Text;
Close();
}

رامین مرادی
شنبه 20 خرداد 1396, 09:59 صبح
شما میتونی از این روش هم استفاده کنی تعریف این متغییر در فرمی که قرار است باز بشود.
public static bool _Access_1
{
get { return Access_1; }
set { Access_1 = value; }
};
private static bool Access_1 = false;
و زمانی که میخواید فرم رو باز کنید
Form2 f2 = new Form2();
Form2._Access_1;
f2.show();
و در فرم دومتون میتونید اون متغییری که مقدار دادید رو استفاده نمایید.

gama_slv
شنبه 20 خرداد 1396, 12:35 عصر
این روش رو امتحان کردم اما وقتی new frmEditCheque(Currentckis,CurrentName).ShowDialog( ); یک فرم بدون هیچ نوع آبجکتی نشون میده.یک فرم خام نشون میده.
روش DialogResult هم خوب اما چرا هی دیالو نشون بدم از نطر ظاهری خوب نیست.
روش سوم هم که آقای مرادی گفتن متوجه نشدم. تست کردم ولی در کجا پارامتر پاس بدم.

رامین مرادی
شنبه 20 خرداد 1396, 12:54 عصر
همونجا قبل از شو دیالوگ مقدار رو میدین به متغییر استاتیک فرم دوم. تو فرم دوم هم در لودش میتونی اون مقدار رو از متغییر اکسس1 بخونی و استفاده کنی

رامین مرادی
شنبه 20 خرداد 1396, 13:04 عصر
روشی که گفتم ساده ترینه میتونید یه نمونش رو از لینک زیر دریافت کنید WindowsFormsApplication4.rar - 47 KB (http://uploadboy.me/plvlrbz63x6e/WindowsFormsApplication4.rar.html) امکان آپلود تو انجمن رو ندارم خطا میده

gama_slv
شنبه 20 خرداد 1396, 13:04 عصر
این روش جواب داد:متعجب:
در فرم ویرایش
internal void Loadcheck(String cksid) {
var dbs = _stg.PD_CheckIssued(int.Parse(cksid)).FirstOrDefau lt();
DtpDate.Value = dbs.DateIssued;
DtpDueDate.Value = dbs.DueDate;
TxtPayTo.Text = dbs.PayTo;
TxtSerial.Text = dbs.Serial.ToString();
TxtAmount.Text = dbs.Amount.ToString();
DrdType.SelectedValue = dbs.TpCkIssId;
}

در فرم لیست
private void DgvChekIssued_CellDoubleClick(object sender, GridViewCellEventArgs e) {
Currentckis = DgvChekIssued.CurrentRow.Cells[1].Value.ToString();
CurrentName = DgvChekIssued.CurrentRow.Cells[3].Value.ToString();
CheckIssuedCud ckc = new CheckIssuedCud();
ckc.Loadcheck(Currentckis);
ckc.Show();
// Close();
}