PDA

View Full Version : سوال: زدن یک دکمه در فرم و اجرای عملیات روی فرمی دیگر



zayens
یک شنبه 05 اردیبهشت 1389, 15:36 عصر
یه برنامه نوشتم که تو قسمت تنظیمات میشه تصویر بکگراند روی فرم اصلی را تغییر داد.
فقط من کاری کردم که وقتی فرم تنظیمات بسته میشه و روی بکگراند فرم اصلی کلیک کنی عکس عوض میشه و یا این که باید برنامه را یه بار دیگه اجرا کرد تا تغییر را ببینی.
نتونستم کاری کنم که به محض تأیید فرم تنظیمات، خودبه خود عکس فرم اصلی عوض بشه
منو راهنمایی می کنین؟

behnam25214
یک شنبه 05 اردیبهشت 1389, 16:15 عصر
1.یا باید کنترلت رو از نوع Public تعریف کنی.
2.میتونی از کلاس ها هم استفاده کنی.

zayens
یک شنبه 05 اردیبهشت 1389, 16:45 عصر
من متوجه نشدم
این قسمتی از فرم تنظیمات من است



public partial class frmconfig : Form
{
myConfig conf = new myConfig();
public frmconfig()
{
InitializeComponent();
conf.SelectAllConfig();
txtbackground.Text = conf.Dvconf[0]["BACKGROUNDPIC"].ToString();
}
//********
//دکمه ی سیو
//********
private void btnSave_Click(object sender, EventArgs e)
{
//وقتی این دکمه زده می شود من انتظار دارم
//که تصویر در بکگراند فرم اصلی نمایش داده بشه
conf.UpConfigBackgroundPath(txtbackground.Text.Tri m());
this.Close();
}
//دکمه های دیگر
//OpenFileDialog دکمه های
private void btnsearch_Click(object sender, EventArgs e)
{
OpenFileDialog fd = new OpenFileDialog();
fd.Filter = " jpg تصاویر|*.jpg|gif عکسهای فشرده|*.Gif|jpeg تصاویر|*.jpeg" +
"|*.jpg , *.jpeg, *.gif همه عکسهای|*.jpg;*.jpeg;*.gif" ;
fd.ShowDialog();
txtbackground.Text = fd.FileName.ToString();
}


وقتی برنامه شروع میشه و یا روی عکس کلیک میشه آدرس تصویری که قبلا در sql ذخیره شده عکس را پیدا میکنه و در فرم اصلی میذاره



//آوردن عکس پس زمینه یا بکگراند
public void imageground()
{
myConfig conf = new myConfig();
conf.SelectAllConfig();
try
{
pictureBox1.BackgroundImage= Image.FromFile(conf.Dvconf[0]["BACKGROUNDPIC"].ToString());

}
catch
{

}
}

اما من نمی خوام که اینجوری باشه
می خوام به محض کلیک روی فرم config یا همون فرم تنظیمات، فرم بسته بشه و حالا عکس روی فرم اصلی عوض شده باشه

Marzieh_A
یک شنبه 05 اردیبهشت 1389, 18:17 عصر
خوب بعد از showdialog کردن فرم config تابع imageground() رو اجرا کنید.
البته این تابع داخل فرم اصلیتون تعریف شده دیگه؟

zayens
دوشنبه 06 اردیبهشت 1389, 11:51 صبح
خوب بعد از showdialog کردن فرم config تابع imageground() رو اجرا کنید.
البته این تابع داخل فرم اصلیتون تعریف شده دیگه؟

بله در فرم اصلی تعریف شده

فقط مسئله این جا است که:
هنگامی که فرم config یا همون فرم تنظیمات باز میشه، فرم اصلی هم در زیر این فرم وجود داره و نباید هم بسته بشه چون همه ی منو ها همانند منوی تنظیمات در این فرم وجود داره.

خب مشکل هم همین جاست چون فرم اصلی فقط یکبار آن هم بار اول فراخوانی میشه .
درضمن
من در قسمت های کار روی grid این کار را انجام دادم و هنگامی که فرم نمایش اعضا نمایش داده میشه اگر روی دکمه ی ویرایش یا عضو جدید در روی همون فرم کلیک شود، فرم جدید روی فرم نمایش اعضا باز میشه و با تغییر روی فرم ها grig فرم زیر هم تغییر می کنه.

مثلا فرم نمایش کاربران دکمه ای برای ویرایش داره:



private void GrdUsers_MouseDoubleClick(object sender, MouseEventArgs e)
{
config.myUserID = Convert.ToInt32(GrdUsers.CurrentRow.Cells[0].Value.ToString());
//صدازدن فرم دوم
frmUpUser upuser = new frmUpUser();
upuser.MygrdView = GrdUsers;
//حال در اینجا فرم دوم یا همون فرم ویرایش کاربران روی همین فرم جاری نمایش داده میشه
upuser.ShowDialog();
}

این هم نمونهای از کد فرم دوم یا فرم ویرایش
من از این کد در فرم ویرایش کاربر استفاده کردم


// (frmUser)در صورت زدن دکمه ویرایش، اعمال تغییرات روی فرم دیگر
DataGridView mygrdView = new DataGridView();
public DataGridView MygrdView
{
get { return mygrdView; }
set { mygrdView = value; }
}
//


که به درستی کار میکنه
اما برای تصویر بکگراند نمیدونم چه طوری باید بلافاصله تغییر در فرم زیرین(فرم اصلی) ایجاد بشه؟

Marzieh_A
دوشنبه 06 اردیبهشت 1389, 23:02 عصر
ببینید شما می تونی بعد از showdialog() مربوط به فرم تنظیمات background صفحه رو عوض کنید که در این صورت، تغییر تصویر پس زمینه تا وفتی که فرم تنظیمات بسته نشه انجام نمی شه.

اما برای اینکه بلافاصله پس زمینۀ فرم عوض بشه می تونید در هر فرمی از برنامه که هستید از این کد استفاده کنید:



Application.OpenForms["MainFormName"].BackgroundImage = تصویر مربوطه

zayens
سه شنبه 07 اردیبهشت 1389, 12:36 عصر
ببینید شما می تونی بعد از showdialog() مربوط به فرم تنظیمات background صفحه رو عوض کنید که در این صورت، تغییر تصویر پس زمینه تا وفتی که فرم تنظیمات بسته نشه انجام نمی شه.

اما برای اینکه بلافاصله پس زمینۀ فرم عوض بشه می تونید در هر فرمی از برنامه که هستید از این کد استفاده کنید:

کد:
Application.OpenForms["MainFormName"].BackgroundImage = تصویر مربوطه



باز هم یه مشکلی هست و اون هم اینه که تصویر را در فرم اصلی در یک picture box گذاشتم و تصویر، بکگراند فرم نیست.
حالا باید چه کار کنم؟

Marzieh_A
سه شنبه 07 اردیبهشت 1389, 12:53 عصر
باز هم یه مشکلی هست و اون هم اینه که تصویر را در فرم اصلی در یک picture box گذاشتم و تصویر، بکگراند فرم نیست.
حالا باید چه کار کنم؟




PictureBox Pic = Application.OpenForms["MainFormName"].Controls["PictureBoxName"] asPictureBox;

Pic.Image = تصویر مربوطه;

zayens
سه شنبه 07 اردیبهشت 1389, 13:31 عصر
از راهنماییتون بسیار ممنون
مشکلم حل شد
کد زیر را در فرم تنظیمات اضافه کردم و حالا به محض کلیک seve و بسته شدن فرم تنظیمات ، تصویر در فرم اصلی عوض میشه



private void frmconfig_FormClosed(object sender, FormClosedEventArgs e)
{
myConfig conf = new myConfig();
conf.SelectAllConfig();
PictureBox Pic = Application.OpenForms["frmMain"].Controls["pictureBox1"] as PictureBox;
Pic.Image = Image.FromFile(conf.Dvconf[0]["BACKGROUNDPIC"].ToString());
}

zayens
سه شنبه 07 اردیبهشت 1389, 17:04 عصر
راستی یه سوال دیگه
چه طور میشه عکس را اتوماتیک Stretch قرار داد.
البته بوسیله ی کد.
یعنی از backGroundimageLayout چه طور میشه استفاده کرد؟
باز هم ممنون

Marzieh_A
سه شنبه 07 اردیبهشت 1389, 18:31 عصر
راستی یه سوال دیگه
چه طور میشه عکس را اتوماتیک Stretch قرار داد.
البته بوسیله ی کد.
یعنی از backGroundimageLayout چه طور میشه استفاده کرد؟
باز هم ممنون

برای اینکه image داخل یه picturebox رو به صوزت stretch ببینی بعد از اینکه یه picturebox مثلا به اسم Pic ایجاد کردی این کد رو استفاده کن :




Pic.SizeMode = PictureBoxSizeMode.StretchImage;



اما backGroundimageLayout وقتی استفاده میشه که backgroundimage کنترل یا فرم مربوطه مقدار دهی بشه، که در اون صورت باید از این کد استفاده کنید (به عنوان مثال Pic نام کنترل هست) :




Pic.BackgroundImageLayout = ImageLayout.Stretch;



اما شما خصوصیت image از picturebox رو مقدار دهی کردی پس باید از کد حالت اول استفاده کنی.

zayens
چهارشنبه 08 اردیبهشت 1389, 21:53 عصر
بازهم از راهنماییتون ممنون
راستی دارم با کریستال ریپورت کار می کنم
اگه یه کد آماده برای تهیه ی فیش حقوقی(قسمت طراحی جدول و ستون بندی ) داری برام میفرستی؟
معلومه که می فرستی.:لبخندساده:
ممنون

zayens
پنج شنبه 09 اردیبهشت 1389, 10:24 صبح
دوباره یه سوال آسون به ذهنم رسید گفتم بپرسم.
من یه فرم اصلی دارم با دکمه هایی خاص که هر دکمه، فرمی را روی فرم اصلی باز میکنه.
وقتی فرم باز میشه دسترسی به فرم اصلی در زیر این فرم غیر فعال میشه.
چه طور میشه که بشه؟
لطفا اگر در properties میشه تنظیمات فرم رویی را عوض کرد بگید، در غیر این صورت اگه کدی وجود داره لطفا برام بذارید.
آقایون و خانومای برنامه نویس...بازهم ممنون

zayens
پنج شنبه 09 اردیبهشت 1389, 13:30 عصر
ببخشید یه سوال دیگه هم داره میاد تو ذهنم .... آره اومد ... درباره ی کامپوننت janus هستش
یه ButtonBar چه جوری کار میکنه؟
وقتی من در هر group چند تا New Item میسازم تا وقتی کاربر هر آیتم را کلیک کنه به فرمی بره، این کار انجام نمیشه
در واقع وقتی روی هر آیتم دابل کلیک می کنم تا کدی براشون تعریف کنم همشون یه تابع را باز می کنن... آخه واسه چی؟؟
راستی .... بازم ممنون

vcldeveloper
جمعه 10 اردیبهشت 1389, 02:20 صبح
ببخشید یه سوال دیگه هم داره میاد تو ذهنم .... آره اومد ... درباره ی کامپوننت janus هستش
دوست عزیز، هر تاپیک برای بحث درباره یک موضوع هست؛ همان موضوعی که در عنوان تاپیک ذکر کردید.
اگر سوالهای مختلفی دارید که با موضوع تاپیک مستقیما مربوط نمیشند، باید ابتدا جستجو کنید که سوالتان تکراری نباشه، اگر تکراری نبود، آن را در یک تاپیک جداگانه ارسال کنید. نه اینکه همه سوالهای خودتان را در یک تاپیک بپرسید.

موفق باشید