酒店客房实时房态图刷新的问题?

xie19sc 2010-05-25 10:08:21
房态图我用的方法是动态的向panle控件中添加lable,正着手与实现刷新功能的时候出现的点问题.

我用的方法是首先清空panel控件中的所有集合,然后再重新加载一次,这样做是可以,但是不是要想要的

因为这样做每次点刷新就会出现0.5秒的间隔,也就是0.5秒的闪屏,我要的效果不出现闪屏就可以直接刷新

不知道有没有高手做过或者懂得怎么弄,都来帮帮忙, 谢谢。


小弟是菜鸟,刚刚起步的。
...全文
1995 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
monexxfx 2010-10-17
  • 打赏
  • 举报
回复
学习了
太阳丛 2010-10-16
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 afeng124 的回复:]
只能说做软件和写程序是两种追求了。
[/Quote]
好有深度啊 !~!~~
afeng124 2010-05-26
  • 打赏
  • 举报
回复
只能说做软件和写程序是两种追求了。
xie19sc 2010-05-26
  • 打赏
  • 举报
回复
其他楼 谢谢你们捧场,小弟分不多, 各位请不要介意。
xie19sc 2010-05-26
  • 打赏
  • 举报
回复
13楼 26楼的 谢谢了你们的方法正是 我需要的, OK。
xie19sc 2010-05-26
  • 打赏
  • 举报
回复
不错不错 初步看了下,果然全是老手。 我先试试看, 在下感激不尽 ....
zhoubupt 2010-05-25
  • 打赏
  • 举报
回复
直接刷新局部
rabbit5 2010-05-25
  • 打赏
  • 举报
回复
web 还是 winForm?

我不太清楚你的需求 ,如果是酒店的房态图,那么房间的位置应该是固定的,没必要清空panel控件的控件,只要把有变化的label的属性修改一下就可以了吧?
捷哥1999 2010-05-25
  • 打赏
  • 举报
回复
为什么不直接通过lable的name找到label,修改lable的text属性?
修改一下昵称 2010-05-25
  • 打赏
  • 举报
回复
可以先隐藏panle控件一段时间 给一个友好的提示, “正在更新...”
xie19sc 2010-05-25
  • 打赏
  • 举报
回复
哪个高手进来帮帮忙,能说的详细点最好,谢谢了。
xie19sc 2010-05-25
  • 打赏
  • 举报
回复
怎么刷
shashengduguzhe 2010-05-25
  • 打赏
  • 举报
回复
直接刷新变更的部分
sxldfang 2010-05-25
  • 打赏
  • 举报
回复

// 按楼主的思路
// 初始化panel
private void button4_Click(object sender, EventArgs e)
{
for (int i = 0; i < 10; i++)
{
Label l = new Label();
l.AutoSize = false;
l.Width = 100;
l.Height = 50;
l.BackColor = Color.White;
l.Left = (i % 4) * 110;
l.Top = (i / 4) * 60;
l.Name = "L" + i;
l.Text = "L" + i;
panel1.Controls.Add(l);
}
}

//更新标签上的文字,仅举个例子,操作没问题
private void button5_Click(object sender, EventArgs e)
{
panel1.Controls["L0"].Text = "Good";
panel1.Controls["L5"].Text = "Afternoon";
}
甴曱 2010-05-25
  • 打赏
  • 举报
回复
用Panel绘制主要是考虑一些不确定因素,可以在里面再添加其他控件,以便显示不同的信息。

Good Luck
甴曱 2010-05-25
  • 打赏
  • 举报
回复
效果图:
甴曱 2010-05-25
  • 打赏
  • 举报
回复
发个目前破项目中写的

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;

namespace MyControls
{
/// <summary>
/// 房态控件,应用于实时显示房间状态
/// Author:Py
/// </summary>
public class RoomStatePanel : Panel
{
string m_roomno;
[Description("房间号码")]
public string RoomNo
{
get { return m_roomno; }
set
{
m_roomno = value;
label1.Text = value;
}
}

RoomState rs = RoomState.Unknown;
/// <summary>
/// 房态
/// </summary>
[Description("房态")]
public RoomState State
{
get { return rs; }
set { rs = value; }
}

#region 屏蔽Size等属性

[Browsable(false)]
public Size Size
{
get { return base.Size; }
set { base.Size = value; }
}

[Browsable(false)]
public int Width
{
get { return base.Width; }
set { base.Width = value; }
}

public int Height
{
get { return base.Height; }
set { base.Height = value; }
}

#endregion

Label label1 = new Label();

public RoomStatePanel()
: base()
{
BorderStyle = BorderStyle.None;
label1.Location = new Point(8, 8);
label1.AutoSize = true;
label1.BackColor = Color.Transparent;
label1.Font = new Font("黑体", 14.25F, FontStyle.Bold);
label1.ForeColor = Color.White;
Height = 40;
Width = 80;
Margin = new Padding(5);
Controls.Add(label1);
this.SizeChanged += new EventHandler(RoomStatePanel_SizeChanged);
}

/// <summary>
/// 禁止变更大小
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void RoomStatePanel_SizeChanged(object sender, EventArgs e)
{
Height = 40;
Width = 80;
}

#region 重绘

protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
BackColor = Color.Transparent;
Graphics g = e.Graphics;
Pen p = new Pen(Color.Black, 1);
Rectangle rect = ClientRectangle;
rect.Location = new Point(2, 2);
rect.Width = ClientRectangle.Width - 4;
rect.Height = ClientRectangle.Height - 4;
switch (State)
{
case RoomState.Dirty:
FillRoundRectangle(g, new SolidBrush(Color.FromArgb(140, 0, 0)), rect, 3);
break;
case RoomState.Immediately:
FillRoundRectangle(g, new SolidBrush(Color.FromArgb(255, 138, 0)), rect, 3);
break;
case RoomState.LodgingClear:
FillRoundRectangle(g, new SolidBrush(Color.FromArgb(0, 174, 0)), rect, 3);
break;
case RoomState.LodgingDirty:
FillRoundRectangle(g, new SolidBrush(Color.FromArgb(0, 109, 0)), rect, 3);
break;
case RoomState.OK:
FillRoundRectangle(g, new SolidBrush(Color.FromArgb(0, 174, 231)), rect, 3);
break;
case RoomState.Service:
FillRoundRectangle(g, new SolidBrush(Color.FromArgb(198, 0, 0)), rect, 3);
break;
case RoomState.Temp:
FillRoundRectangle(g, new SolidBrush(Color.FromArgb(0, 174, 231)), rect, 3);
break;
case RoomState.Unknown:
FillRoundRectangle(g, new SolidBrush(Color.FromArgb(198, 0, 0)), rect, 3);
break;
}
DrawRoundRectangle(g, p, rect, 3);
p.Dispose();
g.Dispose();
e.Graphics.Dispose();
}

void DrawRoundRectangle(Graphics g, Pen pen, Rectangle rect, int cornerRadius)
{
using (GraphicsPath path = CreateRoundedRectanglePath(rect, cornerRadius))
{
g.DrawPath(pen, path);
}
}

void FillRoundRectangle(Graphics g, Brush brush, Rectangle rect, int cornerRadius)
{
using (GraphicsPath path = CreateRoundedRectanglePath(rect, cornerRadius))
{
g.FillPath(brush, path);
}
}

GraphicsPath CreateRoundedRectanglePath(Rectangle rect, int cornerRadius)
{
GraphicsPath roundedRect = new GraphicsPath();
roundedRect.AddArc(rect.X, rect.Y, cornerRadius * 2, cornerRadius * 2, 180, 90);
roundedRect.AddLine(rect.X + cornerRadius, rect.Y, rect.Right - cornerRadius * 2, rect.Y);
roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2, rect.Y, cornerRadius * 2, cornerRadius * 2, 270, 90);
roundedRect.AddLine(rect.Right, rect.Y + cornerRadius * 2, rect.Right, rect.Y + rect.Height - cornerRadius * 2);
roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2, rect.Y + rect.Height - cornerRadius * 2, cornerRadius * 2, cornerRadius * 2, 0, 90);
roundedRect.AddLine(rect.Right - cornerRadius * 2, rect.Bottom, rect.X + cornerRadius * 2, rect.Bottom);
roundedRect.AddArc(rect.X, rect.Bottom - cornerRadius * 2, cornerRadius * 2, cornerRadius * 2, 90, 90);
roundedRect.AddLine(rect.X, rect.Bottom - cornerRadius * 2, rect.X, rect.Y + cornerRadius * 2);
roundedRect.CloseFigure();
return roundedRect;
}

#endregion

}

/// <summary>
/// 房态
/// </summary>
public enum RoomState
{
/// <summary>
/// OK房
/// </summary>
OK,
/// <summary>
/// 在住干净房
/// </summary>
LodgingClear,
/// <summary>
/// 在住脏房
/// </summary>
LodgingDirty,
/// <summary>
/// 空脏房
/// </summary>
Dirty,
/// <summary>
/// 末知
/// </summary>
Unknown,
/// <summary>
/// 维修房
/// </summary>
Service,
/// <summary>
/// 临时态房
/// </summary>
Temp,
/// <summary>
/// 将到
/// </summary>
Immediately
}
}
garfieldzf 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xie19sc 的回复:]
哪个高手进来帮帮忙,能说的详细点最好,谢谢了。
[/Quote]

关注中。。。。。。。。。。。。。
k05060213 2010-05-25
  • 打赏
  • 举报
回复
帮忙顶
加载更多回复(12)

111,130

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧