- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近开始学习c#编程。我正在尝试使用Windows窗体应用程序创建GUI。
我需要根据某些条件使用不同的颜色更新图片瓶。我从电子板上得到四个传感器读数,分别是温度,压力,密度,体积。基于这些值,我必须更新图片瓶。我设计了如下所示的Windows窗体。
我为四个传感器读数创建了四个复选框。我最初是手动输入预期的传输量,并将该值设置为图像瓶上的最大比例。使用温度,压力,密度复选框来估计体积中存在的数量。要估算体积数量,用户可以使用温度传感器或密度传感器或全部或仅使用其中的两个。如果我单击一张支票,那么我将仅使用该传感器读数。音量复选框表示获取到现在为止已传输的音量。
我有这样的条件来估计数量。
1)Liquid
Temperature = 0 to 30 c
Pressure = 0 to 200 bar
Density = 0.5 to 0.95 g/cc.
2)Gas
Temperature = 31 to 60 c
Pressure = 201 to 400 bar
Density = 0 to 0.5 g/cc.
3)Water
Temperature = 61 to 90 c
Pressure = 401 to 600 bar
Density = 0.956 to 1,15 g/cc.
4)Oil
Temperature = 91 to 120 c
Pressure = 601 to 800 bar
Density = 1.2 to 1.35 g/cc.
5)Mud
Temperature = 121 to 150 c
Pressure = 801 to 1000 bar
Density = 1.15 to 1.3 g/cc.
6)Not identified
all the conditions failed.
private void DrawPercentages(int[] percentages, Color[] colors, float[] volumetransfer)
{
Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
Graphics G = Graphics.FromImage(bmp);
// Create a Graphics object to draw on the picturebox
//Graphics G = pictureBox1.CreateGraphics();
// Calculate the number of pixels per 1 percent
float pixelsPerPercent = pictureBox1.Height / volumetransfer[0];
// Keep track of the height at which to start drawing (starting from the bottom going up)
int drawHeight = pictureBox1.Height;
// Loop through all percentages and draw a rectangle for each
for (int i = 0; i < percentages.Length; i++)
{
// Create a brush with the current color
SolidBrush brush = new SolidBrush(colors[i]);
// Update the height at which the next rectangle is drawn.
drawHeight -= (int)(pixelsPerPercent * percentages[i]);
// Draw a filled rectangle
G.FillRectangle(brush, 0, drawHeight, pictureBox1.Width, pixelsPerPercent * percentages[i]);
}
pictureBox1.Image = bmp;
}
private void chkTransferTemp_CheckedChanged(object sender, EventArgs e)
{
if (chkTransferTemp.Checked)
{
Tempvalue = SystemNames.Temp.Data;
}
}
public void DrawVolume(double volume, VolumeTypes volumeType, PictureBox pictureBottle)
{
ucSample sample = new ucSample();
Color color = pictureBottle.BackColor;
switch (volumeType)
{
case VolumeTypes.Gas: color = Color.Lime;
break;
case VolumeTypes.HydrocarboneLiquid: color = Color.Red;
break;
case VolumeTypes.Water: color = Color.Blue;
break;
case VolumeTypes.WaterBasedMud: color = Color.SaddleBrown;
break;
case VolumeTypes.OliBasedMud: color = Color.Chocolate;
break;
case VolumeTypes.NotIdentified: color = Color.Gray;
break;
}
Bitmap bmp = new Bitmap(pictureBottle.Width, pictureBottle.Height);
Graphics G = Graphics.FromImage(bmp);
float pixelsPerPercent = (float)(pictureBottle.Height * (volume / ucSample.Volume));
int drawHeight = (int)volume;
SolidBrush brush = new SolidBrush(color);
G.FillRectangle(brush, 0, drawHeight, pictureBottle.Width, (int)(pixelsPerPercent * volume));
pictureBottle.Image = bmp;
}
public enum VolumeTypes { Water, Gas, HydrocarboneLiquid, OliBasedMud, WaterBasedMud, NotIdentified, None }
public VolumeTypes GetVolumeType(double density, double temprature, double pressure)
{
bool isDensityChecked = true;
bool isTempratureChecked = true;
bool isPressureChecked = true;
bool IsGasePhase = (isDensityChecked) ? (density >= 0 && density <= 0.4) : true && (isTempratureChecked) ? (temprature >= 0 && temprature <= 30) : true &&
(isPressureChecked) ? (pressure >= 0 && pressure <= 100) : true;
bool isHydrocarbanliquid = (isDensityChecked) ? (density >= 0.5 && density <= 1) : true && (isTempratureChecked) ? (temprature >= 31 && temprature <= 60) : true &&
(isPressureChecked) ? (pressure >= 101 && pressure <= 200) : true;
bool isWater = (isDensityChecked) ? (density >= 1 && density <= 2) : true && (isTempratureChecked) ? (temprature >= 61 && temprature <= 90) : true &&
(isPressureChecked) ? (pressure >= 201 && pressure <= 300) : true;
bool isWaterBasedMud = (isDensityChecked) ? (density >= 2.1 && density <= 3) : true && (isTempratureChecked) ? (temprature >= 91 && temprature <= 120) : true &&
(isPressureChecked) ? (pressure >= 301 && pressure <= 400) : true;
bool isOilBasedMud = (isDensityChecked) ? (density >= 3.1 && density <= 4) : true && (isTempratureChecked) ? (temprature >= 121 && temprature <= 150) : true &&
(isPressureChecked) ? (pressure >= 401 && pressure <= 500) : true;
bool isNotIdentified = (isDensityChecked) ? (density >= 4.1 && density <= 5) : true && (isTempratureChecked) ? (temprature >= 151 && temprature <= 200) : true &&
(isPressureChecked) ? (pressure >= 501 && pressure <= 600) : true;
VolumeTypes volumeType = VolumeTypes.None;
if (IsGasePhase) volumeType = VolumeTypes.Gas;
if (isHydrocarbanliquid) volumeType = VolumeTypes.HydrocarboneLiquid;
if (isWater) volumeType = VolumeTypes.Water;
if (isWaterBasedMud) volumeType = VolumeTypes.WaterBasedMud;
if (isOilBasedMud) volumeType = VolumeTypes.OliBasedMud;
if (isNotIdentified) volumeType = VolumeTypes.NotIdentified;
return volumeType;
}
public void DrawVolume(double volume, VolumeTypes volumeType, PictureBox pictureBottle)
{
int x, y, width, height;
x = 0;
ucSample sample = new ucSample();
y = (int)((1 - (volume / ucSample.Volume)) * pictureBottle.Height);
// MessageBox.Show(ucSample.Volume +"");
width = pictureBottle.Width;
height = (int)((volume / ucSample.Volume) * pictureBottle.Height);
Color color = pictureBottle.BackColor;
switch (volumeType)
{
case VolumeTypes.Gas: color = Color.Lime;
break;
case VolumeTypes.HydrocarboneLiquid: color = Color.Red;
break;
case VolumeTypes.Water: color = Color.Blue;
break;
case VolumeTypes.WaterBasedMud: color = Color.SaddleBrown;
break;
case VolumeTypes.OliBasedMud: color = Color.Chocolate;
break;
case VolumeTypes.NotIdentified: color = Color.Gray;
break;
}
Graphics graphics = pictureBottle.CreateGraphics();
pictureBottle.Refresh();
Rectangle rec = new Rectangle(x, y, width, height);
graphics.FillRectangle(new SolidBrush(color), rec);
//Bitmap bmp = new Bitmap(pictureBottle.Width, pictureBottle.Height);
//Graphics G = Graphics.FromImage(bmp);
//float pixelsPerPercent = (float)(pictureBottle.Height * (volume / ucSample.Volume));
//int drawHeight = (int)volume;
//SolidBrush brush = new SolidBrush(color);
//G.FillRectangle(brush, 0, drawHeight, pictureBottle.Width, (int)(pixelsPerPercent * volume));
//pictureBottle.Image = bmp;
}
private void UpdateTable(AnalogSensorData data)
{
DataRow row = _table.Rows.Find(_recs);
if (row == null)
{
row = _table.NewRow();
row["Index"] = _recs;
row["DateTime"] = data.Time;
row["Time"] = data.Time.ToLongTimeString();
row[data.SystemName] = data.Eng;
_logs = 1;
_table.Rows.Add(row);
}
else
{
row[data.SystemName] = data.Eng;
if (++_logs >= SensorUC.NumberOfActive)
{
int i = 1;
double density = 0, temprature = 0, pressure = 0, volume = 0;
foreach (var item in row.ItemArray)
{
sheet.Cells[(int)_recs + 3, i].Value = item;
//if (i == 4)
//{
// object densityCell = item;
// density = (densityCell != null) ? (double)densityCell : 0;
// MessageBox.Show("density is : " + density + "");
//}
if (i == 8)
{
object pressureCell = item;
pressure = (pressureCell != null) ? (double)pressureCell : 0;
//MessageBox.Show("pressure is : " + pressure + "");
}
else if (i == 12)
{
object tempratureCell = item;
temprature = (tempratureCell != null) ? (double)tempratureCell : 0;
// MessageBox.Show("temprature is : "+ temprature + "");
}
if (i == 11)
{
object volumeCell = item;
volume = (volumeCell != null) ? (double)volumeCell : 0;
//MessageBox.Show("Volume is : "+ volume + "");
}
i++;
}
VolumeTypes volumeType = GetVolumeType(density, temprature, pressure);
DrawVolume(volume, volumeType, pictureBottle);
book.SaveAs(_logFile);
_recs++;
}
}
if (!_list.Columns[data.SystemName].HeaderText.Equals(data.SensorName))
{
_table.Columns[data.SystemName].Caption = data.SensorName;
_list.Columns[data.SystemName].HeaderText = data.SensorName;
}
_list.FirstDisplayedCell = _list.Rows[_list.Rows.Count - 1].Cells[0];
_list.Update();
}
public void DrawVolume(double volume, VolumeTypes volumeType, PictureBox pictureBottle)
{
int x, y, width, height;
x = 0;
y = (int)((1 - (volume / ucSample.Volume)) * pictureBottle.Height) ;
width = pictureBottle.Width;
height = (int)((volume / ucSample.Volume) * pictureBottle.Height);
Color color = pictureBottle.BackColor;
switch (volumeType)
{
case VolumeTypes.Gas: color = Color.Lime;
break;
case VolumeTypes.HydrocarboneLiquid: color = Color.Red;
break;
case VolumeTypes.Water: color = Color.Blue;
break;
case VolumeTypes.WaterBasedMud: color = Color.SaddleBrown;
break;
case VolumeTypes.OliBasedMud: color = Color.Chocolate;
break;
case VolumeTypes.NotIdentified: color = Color.Gray;
break;
}
int myCurrentHeight = height - lastHeight;
if (color != currentColor)
{
Rectangle rec = new Rectangle(x, y, width, myCurrentHeight);
myRectangles.Add(new MyRectangle(rec,color));
currentColor = color;
}
else
{
Rectangle rec = new Rectangle(x,y,width,myCurrentHeight+myRectangles.Last<MyRectangle>().rectangle.Height);
myRectangles.Last<MyRectangle>().rectangle = rec;
}
lastHeight = height;
Bitmap bitmap = new Bitmap(Log.frmSample.PictureBottle.Width, Log.frmSample.PictureBottle.Height);
Graphics graphics = Graphics.FromImage(bitmap);
foreach (MyRectangle myRectangle in myRectangles)
{
graphics.FillRectangle(new SolidBrush(myRectangle.color), myRectangle.rectangle);
}
Log.frmSample.PictureBottle.Image = bitmap;
}
最佳答案
对于这种简单的形状,我只使用面板。更改其BackColor,设置其位置,宽度,高度。需要时进行更新。
关于c# - 如何动态填充图片框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15294244/
padding:initial 比 padding:0 有什么优势吗?示例: textarea { padding: 0; } Hello, world! 最佳答案 它们的意思是一
我尝试通过按钮填充 JList,然后在先前填充的 Jlist 上使用 DoubleClick 填充 JTextField。 代码: private void extractUsedVariables
我正在尝试做 var width = ($(this).width() + $(this).css('padding-left') + $(this).css('padding-right' ));
我在导航中添加了悬停效果,遗憾的是悬停也影响了上面的文字。如何在不影响文本位置的情况下向导航添加悬停? 可悲的是,我找不到解决这个问题的方法。 HTML 模板:http://projects.help
我是 F# 初学者,下面代码中的 %-5s 和 %5s 有什么作用?我认为它提供了空间填充,但我不确定它是如何填充的? printfn "%-5s %5s" "a" "b" 当我尝试 prin
我需要选择带狗的用户(带 type 等于“狗”的宠物) var User = Waterline.Collection.extend({ identity: 'user', attribute
我一直在尝试让 Excel 在一组列上应用公式,然后将模式扩展到整个行集。 这导致了以下代码: For i = 0 To avgsheetNames.Count - 1 If Contains(CSt
随着 Flutter 2.0 的发布,FlatButton已被替换为 TextButton . 因此,填充属性不再直接可用,而是作为 ButtonStyle属性(property)。 我的问题是,我该
这似乎是一个简单的问题,但我已经尝试了一个小时,似乎无法弄清楚。 我要做的就是用 Canvas 填充 MainWindow。我找不到任何允许这样做的属性,我能想到的唯一方法是设置 Canvas.Wid
这是a website具有移动 View 。 网站宽度为 640 像素,但 iPhone 以 678 像素渲染文档。在 Android 中看起来很棒。 我添加了视口(viewport)元: 主体 C
我正在使用 GridBagLayout到(当前)显示两行。我知道这种布局对于这项任务来说太过分了,但我正在努力学习如何使用它。问题是我已将两个面板添加到两个单独的行中,并且内容周围存在巨大差距(请参见
我有以下代码已传递给我并创建多边形: var map; function initialize() { var myLatlng = new google.maps.LatLng(-36.4
我在 Jpanel 中有一些项目,然后将其推到顶部并用作基本搜索引擎的工具栏。我遇到一个问题,因为没有足够的空间,所以我的最后一个组合框没有显示。但是,左侧有很多空白空间,我需要移动所有内容来填充 J
我创建了带有阈值的二进制图像。如下图所示如何改变白色形状的颜色以使其可索引? 到目前为止,这是我的代码: void threshold() { cv::Mat src_8uc3_img = c
我有一个 JTable,我想知道是否有更好的方法来填充它,这是我的代码: //Metodo para llenar un jtable con datos de la base public stat
我想要做的是裁剪一个卷以删除所有不相关的数据。例如,假设我有一个 100x100x100 的体积,其中填充了 0,但其中的 50x50x50 体积则填充了 1。如何从原始体积中获得裁剪后的 50x50
因此,我正在创建一种对一组数字进行洗牌的方法,其想法是创建这些数字的总体。因此,我创建了一个循环,对数字进行洗牌,然后将其添加到数组列表中,但是经过一些调试语句后,我发现它确实对数字进行洗牌,但只将最
假设我有这两个类: public class A where T : IEntityWithID, new() { private static EntityInfo entityInfo =
我正在尝试添加用户输入的两个大整数作为字符串。当两个输入字符串的长度不同时,我尝试用零填充较短的数字,但它不起作用。因此,如果我输入 456 和 7,它会给出 3,前面有一些随机字符。感谢您的任何建议
这是我将内容打印到表格 View 的代码 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: Index
我是一名优秀的程序员,十分优秀!