江湖救急,有关ComboBox的问题。

guhonglangzi 2010-09-15 10:46:51
有这样一个ComboBox(JSXZ),其中有三个值:超级管理员、管理员、普通用户,属性ForeColor=HotTrack,DropDownStyle=DropDownList。
问题1、现在想通过“ JSXZ.SelectedIndex = 0;”一句把ComboBox的默认值设为“超级管理员”,但是不能实现?
问题2、想通过“ForeColor=HotTrack”,把选项中的字体改为蓝色,下拉选择框中是蓝色的,但是选定后变成了黑色,怎么个情况?
问题三:想把选定后的ComboBox的背景改变下,应该怎样实现?



下面是“人生如梦”(谢谢您)和一个网友给的方案,但是自己不会用。

思路:可以自己重绘combox中的item,也就是在combox的DrawItem事件里判断要重绘的item是否是当前被选中的,如果是使用FillRectangle来填充它的背景颜色,如果不是,可以不做修改,沿用外面的蓝色。

代码:private void ComboBox1_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
{
if (e.Index < 0)
return;
}


谢谢指教。。。
...全文
127 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2010-09-15
  • 打赏
  • 举报
回复
private void ComboBox1_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
{
if (e.Index < 0)
return;
Rectangle rect = e.Bounds;
if (e.State & DrawItemState.Selected) {
e.Graphics.FillRectangle(SystemBrushes.Highlight, rect);
}
else {
e.Graphics.FillRectangle(SystemBrushes.Window, rect);
}
string ColorName = ComboBox1.Items(e.Index);
SolidBrush b = new SolidBrush(Color.FromName(ColorName));
rect.Inflate(-2, -2);
e.Graphics.FillRectangle(b, rect);
e.Graphics.DrawRectangle(Pens.Black, rect);
Brush b2;
if ((int)b.Color.R + (int)b.Color.G + (int)b.Color.B > 128 * 3) {
b2 = Brushes.Black;
}
else {
b2 = Brushes.White;
}
e.Graphics.DrawString(ColorName, this.ComboBox1.Font, b2, rect.X, rect.Y);
}
龍月 2010-09-15
  • 打赏
  • 举报
回复
晕 还有人复制我的答案
gxm281625843 2010-09-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lz00728 的回复:]
学习一下
[/Quote]我也来了
lz00728 2010-09-15
  • 打赏
  • 举报
回复
学习一下
jianshao810 2010-09-15
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
comboBox1.SelectedIndex = 1;
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{

}

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
SolidBrush s=new SolidBrush(Color.Blue);
string sss=comboBox1.Items[e.Index].ToString();
e.Graphics.DrawString(sss, new Font("宋体", 10), s, new Point(e.Bounds.X, e.Bounds.Y));
}
}
}

龍月 2010-09-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 guhonglangzi 的回复:]
大侠,大侠。。。
[/Quote]
结贴
guhonglangzi 2010-09-15
  • 打赏
  • 举报
回复
大侠,大侠。。。
龍月 2010-09-15
  • 打赏
  • 举报
回复
问题1 :我用的那方法没问题
问题2 : 看代码

要设置 combox 的 属性,在属性菜单设置就行了
this.comboBox1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
this.comboBox1.ForeColor = System.Drawing.Color.Blue;


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
comboBox1.SelectedIndex = 1;
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{

}

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
SolidBrush s=new SolidBrush(Color.Blue);
string sss=comboBox1.Items[e.Index].ToString();
e.Graphics.DrawString(sss, new Font("宋体", 10), s, new Point(e.Bounds.X, e.Bounds.Y));
}
}
}

xhueducls 2010-09-15
  • 打赏
  • 举报
回复
问题1、现在想通过“ JSXZ.SelectedIndex = 0;”一句把ComboBox的默认值设为“超级管理员”,但是不能实现? 用SelectValue=""来设置默认值

问题2,3 就是用重绘来做
龍月 2010-09-15
  • 打赏
  • 举报
回复
先沙发,我一会写个
guhonglangzi 2010-09-15
  • 打赏
  • 举报
回复
现在的代码,实现不了这样的效果啊。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using tsleyyg.App_Help;


namespace tsleyyg
{
public partial class Login : Form
{
public Login()
{
InitializeComponent();
}

private void Loginbutton_Click(object sender, EventArgs e)
{

}

private void Login_Load(object sender, EventArgs e)
{
JSXZ.SelectedIndex=0;
}

private void JSXZ_SelectedIndexChanged(object sender, EventArgs e)
{
Tfvalue.val = JSXZ.SelectedText;
}

private void JSXZ_DrawItem(object sender, DrawItemEventArgs e)
{
SolidBrush sb = new SolidBrush(Color.Blue);
string str = JSXZ.Items[e.Index].ToString();
e.Graphics.DrawString(str,new Font("宋体",10),sb,new Point(e.Bounds.X,e.Bounds.Y));
}
}
}
内容概要:本文档详细介绍了光伏储能单相逆变器并网的Simulink仿真模型,重点聚焦于逆变器在并网过程中的动态行为分析与先进控制策略的设计与实现。该模型涵盖主电路结构、PWM调制技术、锁相环(PLL)同步控制、电流环调节等核心环节,并基于Matulink平台完成系统建模与仿真验证,能够有效研究并网电能质量、系统稳定性及控制算法性能。特别地,模型支持在弱电网条件下进行仿真,适用于分析谐波、电压不平衡、电压波动等电能质量问题,同时结合“阻抗建模”与“扫频法”等技术手段,深入探讨并网系统的交互稳定性与振荡机理,具有较强的理论深度与工程应用价值。; 适合人群:具备电力电子、自动控制理论或新能源发电系统基础知识的研究生、科研人员,以及从事光伏逆变器开发、微电网控制与并网稳定性研究的工程技术人员。; 使用场景及目标:①用于高校及科研机构开展光伏并网逆变器控制策略的教学演示与学术研究;②辅助企业工程师进行并网性能测试、控制器参数优化与系统稳定性评估;③支撑VSG控制、构网型变流器、阻抗建模、宽频振荡分析等相关前沿课题的仿真验证与论文复现工作。; 阅读建议:建议在MATLAB/Simulink环境中动手搭建并调试模型,逐步理解各模块功能与参数影响,重点关注控制器设计与系统动态响应之间的关系,并结合文中提及的“正负序阻抗建模”“扫频辨识”等方法深化对并网稳定性的理论认识与实践能力。
内容概要:本文针对“计及用户需求响应贡献度的综合能源系统多时间尺度优化”问题,提出了一种基于Matlab代码实现的精细化优化模型。该模型深度融合电、热、气等多种能源形式的耦合特性,构建了涵盖日前、日内及实时等多个时间尺度的协调优化调度框架。研究重点在于量化用户在不同场景下的需求响应行为及其对系统运行的贡献度,并将其纳入优化目标,从而提升综合能源系统的运行经济性、稳定性和灵活性。文中系统阐述了模型的数学建模过程,包括以综合运行成本最小化为核心的目标函数、涵盖能量平衡、设备运行约束及用户响应能力的多重约束条件,并详细说明了基于Matlab的求解算法与代码实现流程,为相关研究提供了可复现的技术路径。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力的研究生、科研人员和工程技术人员,特别适用于从事综合能源系统规划、需求响应机制设计、微电网优化运行等领域研究的专业人士。; 使用场景及目标:①研究多能互补背景下综合能源系统的协同优化调度策略;②量化分析用户需求响应对系统削峰填谷、降低运行成本及提升可再生能源消纳能力的具体贡献;③实现多时间尺度优化模型的设计、仿真与性能验证;④作为高水平学术论文复现、科研课题攻关或实际能源项目规划的技术支撑。; 阅读建议:建议读者结合Matlab代码逐模块深入理解,重点关注目标函数中用户贡献度的建模方法、多时间尺度耦合机制的实现逻辑以及优化求解器的配置与调用。在学习过程中,可尝试调整用户响应参数、引入新的能源设备模型或改变网络拓扑结构进行拓展性实验,以全面掌握综合能源系统优化的核心机理与应用技巧。

111,129

社区成员

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

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

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