如上图书管理
1建立数据库
表1:ID,书名,价格,库存
表2: ID,BookID, 详细说明
2建立界面项目
功能:
1 实现 管理员 的录入(增加书)
2 实现 全部库存书的查看
3 客户购买书本自动 从库存中减去
其它功能体现自己想到再去完善
你可以假设自己是一个管理员,然后你每天要把新进的书录入到系统里
然后你可假设自己是一个客户,你想怎么样的界面去把书店里的书呈现到你面前
需求是永远在变的~如一楼所说 没有你做不到的,只有你想象不到、完善不了的~
考虑这个问题的话就是应该在lblContext的TextChanged时间里进行操作,当触发这个事件时,先去判断内容的长度
string text = lblContextText;
int num = 20; //设置一行的长度,根据具体需求来定
然后确定行数,再根据行数确定框的大小
int rows = text/20;
int h = lblContextSizeheight;//为label下移做准备
lblContextSizeheight = 4 rows;//假设一行高度为4
然后再将最后一个按任意键返回的label位置根据框的大小向下移
lblReturnlocationY += lblContextSizeheight;
lblReturnlocationY -= h;
C#WinForm优点:
1界面布局快且美观(控件很多),开发周期较短
2自定义控件制作使用很方便(扩展性很强)
C#WinForm缺点:
1可移植性比较差
2需要netframework支持
从界面开发角度来说。winform/wpf远胜于Qt/mfc。winform/wpf里界面有多少控件可选啊,Qt里才几个。从控件的属性来说,winform/wpf也丰富的多,而Qt感觉乏味。从开发工具来说,vs远胜QT QT的优点是可以跨平台,而winform/wpf不行。从开发语言来说,C#也优于C++。c#比C++诞生的晚,肯定吸收了c++,java等的优点,摒弃了缺点,从这一点说,c#比c++好。c++的优势在于驱动和底层开发上,对上位机开发来说,c#的许多特性(反射、委托、多线程等等),写法更简单,更符合人的思维逻辑,用起来更顺手,所以,用c#开发上位机更好。
如果内容控件被选中
键盘 检测上下左右按键
鼠标 MouseDown 记下鼠标位置 MouseUp再记下位置 比较两个的差值
将内容随之移动 当然 MouseMove也是可以的 但要这样做 一个类变量比如bool b MouseDown 的时候b=true MouseUp为false 当为true的时候内容随MouseMove移动
按钮事件的动态绑定!!
但是我不知道你的具体需求是什么,不好谢代码!!
我写个了简单的列子
界面上与3个按钮,button2,button3,button4,一个进度条progress1
button2的默认功能是改变进度,button3的功能是将button4的功能转移给button2
注意,线程中需要用invoke来调用,我这里为了省事,直接写了,各个控件的代码如下
// 改变进度的方法
private void profuc()
{
while (progressBar1Value!=100)
{
progressBar1Value += 1;
ThreadSleep(1000);
}
//恢复button2的功能
button2Click -= button4_Click;
button2Text = "进度";
button2Click +=new EventHandler(button2_Click);
}
// button2的点击事件
private void button2_Click(object sender, EventArgs e)
{
progressBar1Value = 0;
new Thread(profuc)Start();
}
// button3的点击事件
private void button3_Click(object sender, EventArgs e)
{
//改变button2的功能
button2Click -= button2_Click;
button2Text = "消息";
button2Click += new EventHandler(button4_Click);
}
// button4的点击事件
private void button4_Click(object sender, EventArgs e)
{
MessageBoxShow("我现在的功能是显示消息");
}
void Main()
{
Form f = new Form();
//声明坐标轴与屏幕转换的参数与方法
float xScale = 100;
float yScale = 100;
fSize = new Size(820,700);
PointF origin = new PointF(400,600);
Func<PointF, PointF> mapping = p=> {
return new PointF(originX+pXxScale,
originY - pYyScale);
};
fPaint += (o,e) => {
var g = eGraphics;
//绘制坐标轴
gDrawLine(PensBlack, mapping(new PointF(-10,0)),mapping(new PointF(10,0)));
for(int x=-10;x<=10;x++)
gDrawString(xToString(), fFont, BrushesBlack, mapping(new PointF(x,0)));
gDrawLine(PensBlack, mapping(new PointF(0,-10)),mapping(new PointF(0,10)));
for(int y=1;y<=10;y++)
gDrawString(yToString(), fFont, BrushesBlack, mapping(new PointF(0,y)));
//抗锯齿 曲线平滑
gSmoothingMode = SystemDrawingDrawing2DSmoothingModeHighQuality;
//声明一个对指定数学函数描点绘制的方法
Action<Func<float, float>> DrawArc = func => {
Pen pen = new Pen(ColorIndigo, 3f);
List<PointF> points = new List<PointF>();
for(float x=-10;x<=10;x+=001f) {
pointsAdd(mapping(new PointF(x,func(x))));
}
gDrawLines(pen, pointsToArray());
penDispose();
};
//执行绘制 y=04^x
DrawArc(x=>(float)MathPow(04f, x));
//执行绘制 y=25^x
DrawArc(x=>(float)MathPow(25f, x));
};
ApplicationRun(f);
}
大致上就是用GDI+了。。这是个大致的例子。。具体的参数泥可以随意调整试试。
欢迎分享,转载请注明来源:浪漫分享网
评论列表(0条)