PDA

View Full Version : مشکل در محیط کنسول



ermia_
جمعه 15 خرداد 1388, 16:34 عصر
سلام دوستان
من یه برنامه نوشتم در قسمت کنسول با opengl
این برنامه یک n رو از ورودی میگیره و د ضلعی منتظم رو رسم میکنه.
مشکلم اینه که نمی دونم تو محیط کنسول چطوری یک textbox قرار بدم که از کاربر n رو بگیرم.
میخوام مثلا یه textbox و یه دکمه بالای صفحه باشه، کاربر n رو که وارد کرد تو tetxtbox و دکمه ok رو زد، n ضلعی رسم بشه.

تو محیط windows form این برنامه رو ننوشتم واسه اینکه نمی دونستم کلاس opengl رو چطوری به فرم ربط بدم که نتیجه تو اون فرم نشون داده بشه.

تازه C# دارم یاد میگیرم، اطلاعاتم خیلی کمه.

برنامه ای که نوشتم اینه:
(البته همشو من ننوشتم،فقط قسمت دستورات opengl رو نوشتم،قسمت بالاش که یه فرم DotsDemo ایجاد میکنه و به کلاس Opengl ربط میده از یه برنامه دیگه گرفتم)




using System;




using System.Drawing;


using System.Windows.Forms;



using CsGL.OpenGL;



public class DotsDemo : Form


{
View view = new View();
public DotsDemo()
{
Text = "Dots demo !";
view.Dock = DockStyle.Fill;
Controls.Add(view);
}
public static void Main()
{
DotsDemo di = new DotsDemo();
Application.Run(di);
}
}
class View : OpenGLControl
{
public override void glDraw()
{
GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
// Clear Screen And Depth Buffer
GL.glBegin(GL.GL_LINES);
int i;
double x0, y0, x1, y1, th = 360 / n;
x0 = 1 * Math.Cos(th * Math.PI / 180);
y0 = 1 * Math.Sin(th * Math.PI / 180);
for (i = 1; i <= n; i++)
{
x1 = 1 * Math.Cos(((i+1)*th)* Math.PI/180);
y1 = 1 * Math.Sin(((i+1)*th)* Math.PI/180);
GL.glVertex2d(x0, y0);
GL.glVertex2d(x1, y1);
x0 = x1;
y0 = y1;
}
GL.glEnd();
GL.glFlush();
}
protected override void InitGLContext()
{
GL.glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
GL.glColor3f(0.0f, 0.0f, 0.0f);
GL.glPointSize(1.0f);
}
protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
GL.glMatrixMode(GL.GL_PROJECTION);
GL.glLoadIdentity();
}



}

برنامه تو محیط کنسول و دادن یه عدد به جای n به درستی کار می کنه، اما میخوام از textbox و ... تو برنامه استفاده کنم اما بلد نیستم
میشه کمکم کنید
ممنونم

Reza_Yarahmadi
جمعه 15 خرداد 1388, 18:40 عصر
توی کنسول معمولا از دو دستور زیر برای گرفتن مقدار از کاربر استفاده میشه:


Console.Read();
Console.ReadLine();

ermia_
جمعه 15 خرداد 1388, 22:36 عصر
بله اینو می دونم اما نمیخوام با اون محیط شبیه داس کار کنم.
میخوام از تکس باکس و اینها استفاده کنم.
اگه برنامه بالا رو اجرا کنید، شکل چند ضلعی تو یه فرم رسم میشه.
میخوام بدونم چطور می تونم به این فرم که تو کنسول نوشته شده تکس باکس رو هم اضافه کنم که مقدار ورودی رو تو اون بشه وارد کرد

ermia_
یک شنبه 17 خرداد 1388, 11:34 صبح
بچه ها کسی نمیتونه راهنمایی کنه؟ :(
ببینید این تیکه کد رو اجرا کنید



using System;
using System.Drawing;
using System.Windows.Forms;
using CsGL.OpenGL;
public class DotsDemo : Form
{
View view = new View();
public DotsDemo()
{
Text = "Dots demo !";
view.Dock = DockStyle.Fill;
Controls.Add(view);
}
public static void Main()
{
DotsDemo di = new DotsDemo();
Application.Run(di);
}
}
class View : OpenGLControl
{
public override void glDraw()
{
GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
// Clear Screen And Depth Buffer
GL.glBegin(GL.GL_LINES);
int i;
double x0, y0, x1, y1, th = 360 / 8;
x0 = 1 * Math.Cos(th * Math.PI / 180);
y0 = 1 * Math.Sin(th * Math.PI / 180);
for (i = 1; i <= 8; i++)
{
x1 = 1 * Math.Cos(((i+1)*th)* Math.PI/180);
y1 = 1 * Math.Sin(((i+1)*th)* Math.PI/180);
GL.glVertex2d(x0, y0);
GL.glVertex2d(x1, y1);
x0 = x1;
y0 = y1;
}
GL.glEnd();
GL.glFlush();
}
protected override void InitGLContext()
{
GL.glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
GL.glColor3f(0.0f, 0.0f, 0.0f);
GL.glPointSize(1.0f);
}
protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
GL.glMatrixMode(GL.GL_PROJECTION);
GL.glLoadIdentity();
}
}



البته فایل اول داخل پوشه زیپ رو هم به رفرنس ها ادد کنید و فایل دوم رو تو system32 کپی کنید (برای اجرای کد مربوط به opengl)


اگه هم وقت ندارید که برنامه رو اجرا کنید فقط یکی که سی شارپ بلده لطفا تکس باکس و دکمه رو برام تو برنامه بذاره طوری که با فرم و کدهایی نوشتم بتونه رابطه برقرار کنه


می بینید یه فرم باز میشه و یه 8 ضلعی رو رسم میکنه، حالا میخوام این عدد 8 رو خود کاربر وارد کنه و تو تکس باکس بنویسه و دکمه ok رو بزنه.( یعنی تو برنامه به جای 2 جا که عدد 8 رو گذاشتم، n بذارم)
کسی میتونه ابن تکس باکس رو بذاره برام؟ :( آخه من هر کاری می کنم نمی تونم


خیلی ممنون میشم کمکم کنید