PDA

View Full Version : سوال: تغییر سایز فرم به صورت آهسته(حرفه ای)



hamirayan
سه شنبه 18 تیر 1392, 17:56 عصر
با سلام
من میخوام یه فرم طراحی کنم به این شکل که:

106949

با زدن دکمه ok سایز فرم(ارتفاع)بزرگتر شود و به شکل زیر در آید:البته میخوام این تغییر ارتفاع به آرامی شکل بگیرد که کاربر این تغییر راببیند.

106950
و با زدن دکمه cancel فرم به حالت اولیه برگردد
آیا استفاده از تایمر به صورتی که هر چند میلی ثانیه فرم کمی بزرگتر شود فکر خوبیه؟؟؟

CsharpNevisi
سه شنبه 18 تیر 1392, 19:46 عصر
من با تایمر درست میکنم ... !!!
اگر تایمر تو کار این فرم خللی ایجاد نمیکنه .... همین که کارتو راه بندازه فکر خوبیه .. !!
ولی فک کنم با dllImport هم بشه ... !!!

hamirayan
سه شنبه 18 تیر 1392, 20:01 عصر
CsharpNevisi (http://barnamenevis.org/member.php?280820-CsharpNevisi) ،مم ن از پاسخگویی شما،dllImport چیه؟؟!! :متفکر:

CsharpNevisi
سه شنبه 18 تیر 1392, 20:10 عصر
CsharpNevisi (http://barnamenevis.org/member.php?280820-CsharpNevisi) ،مم ن از پاسخگویی شما،dllImport چیه؟؟!! :متفکر:

API ویندوز .... !!!! این نمونه کد با توضیحات که با استفاده از DllImport سی دی را را باز میکنه ... !!!
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
//این فضا نام را اضافه نمایید
using System.Runtime.InteropServices;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//این هم تابع معروف!
//باز کردن سی دی رام
[DllImport("winmm.dll", EntryPoint = "mciSendStringA", CharSet = CharSet.Ansi)]
protected static extern int mciSendString(string lpstrCommand, StringBuilder lpstrReturnString, int uReturnLength, IntPtr hwndCallback);

//پیاده سازی تایع
public bool ProcessCDTray(bool open)
{
int ret = 0;
//do a switch of the value passed
switch (open)
{
case true: //true = open the cd
ret = mciSendString("set cdaudio door open", null, 0, IntPtr.Zero);
return true;
break;
case false: //false = close the tray
ret = mciSendString("set cdaudio door closed", null, 0, IntPtr.Zero);
return true;
break;
default:
ret = mciSendString("set cdaudio door open", null, 0, IntPtr.Zero);
return true;
break;
}
}


private void Form1_Load(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{
ProcessCDTray(true);
}
}
}

erfan_urchin
سه شنبه 18 تیر 1392, 20:17 عصر
CsharpNevisi (http://barnamenevis.org/member.php?280820-CsharpNevisi) ،مم ن از پاسخگویی شما،dllImport چیه؟؟!! :متفکر:

API برای چی؟؟؟
شما با تایمر خیلی راحت میتونین این کارو کنین
بگین که هر ثانیه که میگذره بیاد کد زیر رو انجام بده
this.Width += 5;
this.Height += 10;
و علاوه براین کد بگین Location پنلی که پایین فرم گذاشتین به Y اون اضافه کنید
موفق باشین

hamirayan
سه شنبه 18 تیر 1392, 20:18 عصر
API ویندوز .... !!!! این نمونه کد با توضیحات که با استفاده از DllImport سی دی را را باز میکنه ... !!!
منظور من یک فرمه که مثل کشو باز شه،(فرم کشویی)،یکی از مشکلاتی که وجود داره اینه که فرض کنید در یک پروژه ای سایز فرم ها با هم متفاوته و قراره این فرم ها هر کدوم به اندازه ی مشخصی مانند کشو باز (از نظر ارتفاع) و بسته(به حالت قبلی برگردند)شوند.
حال چه راه حلی پیشنهاد میکنید؟

hamirayan
سه شنبه 18 تیر 1392, 20:25 عصر
برای چی؟؟؟
شما با تایمر خیلی راحت میتونین این کارو کنین
بگین که هر ثانیه که میگذره بیاد کد زیر رو انجام بده
this.Width += 5;
this.Height += 10;
و علاوه براین کد بگین Location پنلی که پایین فرم گذاشتین به Y اون اضافه کنید
موفق باشین
حرف شما درسته،ولی این هم در نظر بگیرید که وقتی مینویسیم


this.Height += 10;
قراره مثلا فرم به اندازه خاصی بازشه،شرط توقف چیه؟؟؟

CsharpNevisi
سه شنبه 18 تیر 1392, 20:28 عصر
حرف شما درسته،ولی این هم در نظر بگیرید که وقتی مینویسیم


this.Height += 10;
قراره مثلا فرم به اندازه خاصی بازشه،شرط توقف چیه؟؟؟

if (this.Height<x)
{
this.Height += 10;
}
x=اندازه ای که میخوایی ... !!!

CsharpNevisi
سه شنبه 18 تیر 1392, 20:29 عصر
API برای چی؟؟؟
شما با تایمر خیلی راحت میتونین این کارو کنین
گفته شد که غیز از تایمر این راه هم هست .. !!!

CsharpNevisi
سه شنبه 18 تیر 1392, 20:31 عصر
منظور من یک فرمه که مثل کشو باز شه،(فرم کشویی)،یکی از مشکلاتی که وجود داره اینه که فرض کنید در یک پروژه ای سایز فرم ها با هم متفاوته و قراره این فرم ها هر کدوم به اندازه ی مشخصی مانند کشو باز (از نظر ارتفاع) و بسته(به حالت قبلی برگردند)شوند.
حال چه راه حلی پیشنهاد میکنید؟

همونطوری که خودت گفتی میتونی از تایمیر استفاده کنی ... !!!
و عرض فرم رو تغییر بدی
با این دستور :
if (this.Height<x)

{

this.Height += 10;

}

x=اندازه ای که میخوایی ... !!!

barnamenevisjavan
سه شنبه 18 تیر 1392, 20:33 عصر
با تایمر جواب نمیگیری
چون وقتی هر چند میلی ثانیه ارتفاع رو زیاد میکنه کاربر میبینه که فرم داره با پرش ارتفاش زیاد میشه (جالب نمیشه /یه چیز مسخره میشه)
بهتره یا از WPF استفاده کنی یا از کامپوننت هایی که منوی کشویی دارن استفاده کنی

CsharpNevisi
سه شنبه 18 تیر 1392, 20:40 عصر
با تایمر جواب نمیگیری
چون وقتی هر چند میلی ثانیه ارتفاع رو زیاد میکنه کاربر میبینه که فرم داره با پرش ارتفاش زیاد میشه (جالب نمیشه /یه چیز مسخره میشه)
بهتره یا از WPF استفاده کنی یا از کامپوننت هایی که منوی کشویی دارن استفاده کنی

منم این حرفو قبول دارم .... !!!
فک کنم API مربوط به این کارم باشه ... !!!

amir200h
سه شنبه 18 تیر 1392, 20:46 عصر
API برای چی؟؟؟
شما با تایمر خیلی راحت میتونین این کارو کنین
بگین که هر ثانیه که میگذره بیاد کد زیر رو انجام بده
this.Width += 5;
this.Height += 10;
و علاوه براین کد بگین Location پنلی که پایین فرم گذاشتین به Y اون اضافه کنید
موفق باشین

من عرفان جان موافقم. فقط با کد زیر بیشترتر موافقم :لبخند:
this.Width += 5;
this.Height += 10;
this.Top -=10;
this.Left -=5;