C# 自定义控件实现ChackBox的Checked效果

研究好久,想实现自定义属性变更后图片也随之变更。
由于是组合控件(pictureBox、lable)两个控件组成。
实现效果Checked属性发生变更true(false)显示不同的两个图片。
下面的代码只能实现点击控件发生的变化,实际上更改图片说明
这里的属性不会变更图片。目前想实现图中的属性true(false)变更后图片也随之变更

图片说明

    public partial class CheckedExChagedEventArgs : UserControl
    {
        public delegate void ClickEventHandler(object sender, EventArgs e);
        public new event ClickEventHandler Click;

        public CheckedExChagedEventArgs()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 与控件关联的文本
        /// </summary>
        [DefaultValue("")]
        [DisplayName("文本内容")]
        [Description("属性:L_Text")]
        public string L_Text
        {
            get { return l_box.Text; }
            set { l_box.Text = value; }
        }
        [Category("重要属性")]
        [Description("组件是否处于选中状态")]
        public bool Checked { get; set; }

        public void ChackBox_MouseDown(object sender, MouseEventArgs e)
        {
            if (Checked)
            {
                Checked = false;
                p_chack.BackgroundImage = Properties.Resources.未选中;
            }
            else
            {
                Checked = true;
                p_chack.BackgroundImage = Properties.Resources.选中;
            }
        }

        private void ChackBox_Click(object sender, EventArgs e)
        {
            this.Refresh();
            this.Click?.Invoke(this, e);
        }
    }

1个回答

那你不能直接{get;set;}
你要写成
private bool checkEd;
[Category("重要属性")]
[Description("组件是否处于选中状态")]
public bool Checked
{
get
{
return this.checkEd;
}
set
{
p_chack.BackgroundImage = value ? Properties.Resources.选中 : Properties.Resources.未选中;
checkEd = value;
}
}

wh3845348
99887744 太感谢了,对封装控件这块涉及的比较少,已经可以成功实现了 谢谢。
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C# 如何将一个类中全部字段添加到List中(字段为自定义类,引用类型,不是值类型)?
自定义了一个类,里面包含了很多字段(也是自定义的类),如何将类中的字段全部添加到list中 做这个功能主要是为了能够通过list来访问FileInfoInIni,调用FileInfoInIni的方法。 或者哪位大神有更好的办法能实现这个功能也行 ``` class SystemParamClass { public String ModelFileSavePathName = "D:/Data/SystemParam";//保存参数的文件夹名称 public String ModelSystemParamFileName = "/SystemParam.ini"; public List<FileInfoInIni> AllIniParam = new List<FileInfoInIni>(); public FileInfoInIni LeftDownCamGrapImageHeight; public FileInfoInIni LeftDownCamGrapImagePoseX; public FileInfoInIni LeftDownCamGrapImagePoseY; public FileInfoInIni RightDownCamGrapImageHeight public FileInfoInIni RightDownCamGrapImagePoseX; public FileInfoInIni RightDownCamGrapImagePoseY; } ``` 如何写一个方法,自动将 FileInfoInIni 全部添加到 AllIniParam 中 FileInfoInIni  为自定义的类,我试过了反射,只能设置值,不知道怎么转换类型,然后添加进去 ``` public static void AddTolist(object TempClass) { Type t = TempClass.GetType(); FieldInfo[] fields = t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public); foreach (FieldInfo field in fields) { if (field.FieldType == typeof(FileInfoInIni)) { Console.WriteLine("Field:" + field); Console.WriteLine("Field:" + field.Name ); } //Console.WriteLine("Field:" + field); } } ``` 不能强制转换类型 ![图片说明](https://img-ask.csdn.net/upload/201911/15/1573789359_269905.jpg) FileInfoInIni的定义 ``` public class FileInfoInIni { private string FilePathAndName; private string FileSection; private string FileAppName; public object Value; public string Key { get => FileAppName; } [DllImport("kernel32", CharSet = CharSet.Ansi, EntryPoint = "GetPrivateProfileStringA", ExactSpelling = true, SetLastError = true)] private static extern int GetPrivateProfileString([MarshalAs(UnmanagedType.VBByRefStr)] ref string lpApplicationName, [MarshalAs(UnmanagedType.VBByRefStr)] ref string lpKeyName, [MarshalAs(UnmanagedType.VBByRefStr)] ref string lpDefault, [MarshalAs(UnmanagedType.VBByRefStr)] ref string lpReturnedString, int nSize, [MarshalAs(UnmanagedType.VBByRefStr)] ref string lpFileName); [DllImport("kernel32", CharSet = CharSet.Ansi, EntryPoint = "WritePrivateProfileStringA", ExactSpelling = true, SetLastError = true)] private static extern int WritePrivateProfileString([MarshalAs(UnmanagedType.VBByRefStr)] ref string lpApplicationName, [MarshalAs(UnmanagedType.VBByRefStr)] ref string lpKeyName, [MarshalAs(UnmanagedType.VBByRefStr)] ref string lpString, [MarshalAs(UnmanagedType.VBByRefStr)] ref string lpFileName); public string GetINI(string Section, string AppName, string lpDefault, string FileName) { string text = Strings.LSet("", 256); FileInfoInIni.GetPrivateProfileString(ref Section, ref AppName, ref lpDefault, ref text, Strings.Len(text), ref FileName); return Strings.Left(text, checked(Strings.InStr(text, "\0", CompareMethod.Binary) - 1)); } public long WriteINI(string Section, string AppName, string lpDefault, string FileName) { return (long)FileInfoInIni.WritePrivateProfileString(ref Section, ref AppName, ref lpDefault, ref FileName); } public bool ReadValue() { bool result; try { this.Value = this.GetINI(this.FileSection, this.FileAppName, "", this.FilePathAndName); bool flag = Operators.ConditionalCompareObjectEqual(this.Value, "", false); if (flag) { result = false; return result; } } catch (Exception expr_41) { ProjectData.SetProjectError(expr_41); result = false; ProjectData.ClearProjectError(); return result; } result = true; return result; } public bool SaveValue() { bool result; try { string left = this.Value.ToString(); this.WriteINI(this.FileSection, this.FileAppName, Conversions.ToString(this.Value), this.FilePathAndName); string iNI = this.GetINI(this.FileSection, this.FileAppName, "", this.FilePathAndName); bool flag = Operators.CompareString(left, iNI, false) != 0; if (flag) { result = false; return result; } } catch (Exception expr_71) { ProjectData.SetProjectError(expr_71); result = false; ProjectData.ClearProjectError(); return result; } result = true; return result; } public FileInfoInIni(string TempFilePathAndName, string TempFileSection, string TempFileAppName) { this.Value = RuntimeHelpers.GetObjectValue(new object()); this.FilePathAndName = TempFilePathAndName; this.FileSection = TempFileSection; this.FileAppName = TempFileAppName; this.Value = null; } public void dispose() { this.FilePathAndName = ""; this.FileSection = ""; this.FileAppName = ""; this.Value = null; } } ```
关于WINFORM c# 控件数组问题
我在窗体中创建了一个控件数组CHECKBOX,并添加到了窗体的PANEL中,请问我在程序中怎么去获得窗体上添加的控件数组的CHECKED属性变化, 我在窗体上更改了CHECKBOX的CHECKED的状态,但是在程序中通过循环判断控件的状态,并不能得到CHECKBOX的Checked状态,已经勾选的控件,得到的CHECHED属性却是为FALSE,请问怎么解决。 另外,怎么通过程序,更改控件数组某一个控件的属性,例如颜色,选中状态。
关于c#窗体控件的具体问题
先在这儿谢谢大家了 ![假设对号框为 checkbox1 日历表为 datetimepicker1 问题是日历表在未checkbox1未checked以前是灰色,checked以后可以选择日历, 详问具体代码,拜托 ![假设对号框为 checkbox1 日历表为 datetimepicker1 问题是日历表在未checkbox1未checked以前是灰色,checked以后可以选择日历, 详问具体代码,拜托 ](https://img-ask.csdn.net/upload/201703/11/1489198907_105623.png) 两个form窗体,form1中的button点击以后出现如图中的窗体,窗体中的comebox中如何显示本地磁盘目录下的文件,请问具体代码 拜托 万分感谢 ![两个form窗体,form1中的button点击以后出现如图中的窗体,窗体中的comebox中如何显示本地磁盘目录下的文件,请问具体代码 拜托 万分感谢](https://img-ask.csdn.net/upload/201703/11/1489198946_745335.png)
c# 线程间操作无效 从不是创建控件“listView1”的线程访问它
![图片说明](https://img-ask.csdn.net/upload/201912/02/1575253835_918613.jpg) private void button2_Click(object sender, EventArgs e) { Lrcload ld = new Lrcload(); ld.code = Encoding.Default; if (dcgb2312.Checked) ld.code = System.Text.Encoding.GetEncoding("gb2312"); if (dcutf8.Checked) ld.code = System.Text.Encoding.GetEncoding("utf-8"); ld.listview = listView1.Items; ld.reload = checkBox3.Checked; //ld.load(); Thread t = new Thread(new ThreadStart(ld.load)); t.IsBackground = true; t.Start(); } class Lrcload { /// <summary> /// 保存文件编码 /// </summary> public System.Text.Encoding code; /// <summary> /// 列表listview.Items /// </summary> // public ListViewItem[] listview; public ListView.ListViewItemCollection listview; /// <summary> /// 已有歌词重下 /// </summary> public bool reload; /// <summary> /// 下载歌词 /// </summary> public void load() { bu(false); foreach (ListViewItem lvi in listview) { try {
C#编程 其中radioButton控件48个,button控件24个,请教各位大牛,如何简化编写,功能如下代码重复24次。
private void radioButton1_CheckedChanged(object sender, EventArgs e) { if (radioButton1.Checked == true) button1.BackColor = Color.Red; } private void radioButton2_CheckedChanged(object sender, EventArgs e) { if (radioButton2.Checked == true) button1.BackColor = Color.Blue; } private void button1_Click(object sender, EventArgs e) { button1.BackColor = Color.White; radioButton1.Checked = false; radioButton2.Checked = false; }
C# MVC 如何加载默认checked的kendo treeview, 远程json数据绑定?
C# MVC 如何加载默认checked的kendo treeview, 远程json数据绑定?json数据含有checked 属性 加载在前台 那么 空点第一次点击或者展开的时候会将后台默认选中的给去掉 或者子节点无法选中只有点击的节点选中。第二次点击又是好的。 如果加 loadOnDemand: false,那么有会因为数据太多 而页面一直未响应。该怎么解决?求大神 $("#ProductTreeView").kendoTreeView({ checkboxes: { checkChildren: true }, check: onProductCheck, dataSource: wttinlineDefault }); $.ajax({ url: "../Home/getproducts", type: "POST", dataType: 'json', traditional: true, success: function (json) { if (json != null) { alert("Sucess to get result from WTT job"); RC = new kendo.data.HierarchicalDataSource({ data: json }); $("#ProductTreeView").data("kendoTreeView").setDataSource(RC); } else { alert("Fail to get result from WTT job") } }
在C#winform中怎么让添加一些参数后,这行数据的ID自动加一
![图片说明](https://img-ask.csdn.net/upload/201911/07/1573094310_887456.png) ``` private void btnAdd_Click(object sender, EventArgs e) { string dbPath = @"D:\历年高考分数.db"; if (btnName == "添加") { if (File.Exists(dbPath)) { string sq = @"Data Source=" + dbPath; m = new SQLiteConnection(sq); m.Open(); string sql = "select * from sqlite_master where type='table' and name ='特性'"; SQLiteCommand command = new SQLiteCommand(sql, m);// //m.Close(); //AddcailiaoPara1(dbPath, "特性"); if (command.ExecuteScalar() == null) { m.Close(); NewTable1(dbPath, "特性"); AddcailiaoPara1(dbPath, "特性"); } else { m.Close(); AddcailiaoPara1(dbPath, "特性"); } } else { NewDbFile(dbPath); NewTable1(dbPath, "特性"); AddcailiaoPara1(dbPath, "特性"); } Guanlicailiaoquxian.form1.LoadcailiaoPara(); DialogResult result = MessageBox.Show("添加成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } } public void AddcailiaoPara1(string dbPath, string tableName) { string yinsu = ""; if (radioButton2.Checked == true) { yinsu = "紫外线"; } else if (radioButton1.Checked == true) { yinsu = "温度、振动"; } string id = ? //string tabText = txtName.Text + yinsu; //string str = "'" + txtName.Text + "'," + "'" + txtyunxinglicheng.Text + "'," + "'" + txtyingdu.Text + "'," + "'" + txtlashenqiangdu + "'," + "'" + txtladuanshenchanglv + "'," + "'" + yinsu + "'," + "'" + id + "'"; string str = "'" + txtName.Text + "'," + "'" + txtyunxinglicheng.Text + "'," + "'" + txtyingdu.Text + "'," + "'" + txtlashenqiangdu.Text + "'," + "'" + txtladuanshenchanglv.Text + "'," + "'" + yinsu + "'," + "'" + id + "'"; string sq = @"Data Source=" + dbPath; m = new SQLiteConnection(sq); m.Open(); string sql = "insert into " + tableName + " (传感器型号,运行里程,硬度,拉伸强度,拉断伸长率,因素,材料特性ID) values (" + str + ")"; SQLiteCommand command = new SQLiteCommand(sql, m); command.ExecuteNonQuery(); m.Close(); } ``` 怎么让添加一些参数后,这行数据的ID自动加一,以便于以后根据id删除数据 string id那应该怎么写
c#编写的串口助手打开串口32单片机立刻黑屏,急求
using Microsoft.Win32; using System; using System.IO.Ports; using System.Windows.Forms; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; namespace WindowsFormsApp { public partial class Form1 : Form { //SerialPort sp = null;//声明一个串口类 bool isOpen = false;//打开串口标志位 bool isSetProperty = false;//属性设置标志位 bool isHex = false;//十六进制显示标志位 public Form1() { InitializeComponent(); System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;//设置该属性为false } //我们在form载入时,扫描识别存在的串口。 private void Form1_Load(object sender, EventArgs e) { this.MaximumSize = this.Size; this.MinimumSize = this.Size; this.MaximizeBox = false; RegistryKey keyCom = Registry.LocalMachine.OpenSubKey("Hardware\\DeviceMap\\SerialComm"); if (keyCom != null) { string[] sSubKeys = keyCom.GetValueNames(); cbxCOMPort.Items.Clear(); foreach (string sName in sSubKeys) { string sValue = (string)keyCom.GetValue(sName); cbxCOMPort.Items.Add(sValue); } if (cbxCOMPort.Items.Count > 0) cbxCOMPort.SelectedIndex = 0; else { cbxCOMPort.Text = ""; MessageBox.Show("没有找到可用串口!", "错误提示"); } } cbxBaudRate.SelectedIndex = 4; cbxStopBits.SelectedIndex = 1; cbxDataBits.SelectedIndex = 0; cbxParity.SelectedIndex = 0; rbnChar.Checked = true; } private void btnCheckCOM_Click(object sender, EventArgs e)//检测哪些串口可用 { RegistryKey keyCom = Registry.LocalMachine.OpenSubKey("Hardware\\DeviceMap\\SerialComm"); if (keyCom != null) { string[] sSubKeys = keyCom.GetValueNames(); cbxCOMPort.Items.Clear(); foreach (string sName in sSubKeys) { string sValue = (string)keyCom.GetValue(sName); cbxCOMPort.Items.Add(sValue); } if (cbxCOMPort.Items.Count > 0) cbxCOMPort.SelectedIndex = 0; else { cbxCOMPort.Text =""; MessageBox.Show("没有找到可用串口!", "错误提示"); } } } private bool CheckPortSetting()//检查串口是否设置 { if (cbxCOMPort.Text.Trim() == "") return false; if (cbxBaudRate.Text.Trim() == "") return false; if (cbxDataBits.Text.Trim() == "") return false; if (cbxParity.Text.Trim() == "") return false; if (cbxStopBits.Text.Trim() == "") return false; return true; } private bool CheckSendData() { if (tbxSendData.Text.Trim() == "") return false; return true; } private void SetPortProperty()//设置串口的属性 { serialPort.PortName = cbxCOMPort.Text.Trim();//设置串口名 serialPort.BaudRate = Convert.ToInt32(cbxBaudRate.Text.Trim());//设置串口的波特率 float f = Convert.ToSingle(cbxStopBits.Text.Trim());//设置停止位 if (f == 0) { serialPort.StopBits = StopBits.None; } else if (f == 1.5) { serialPort.StopBits = StopBits.OnePointFive; } else if (f == 1) { serialPort.StopBits = StopBits.One; } else if (f == 2) { serialPort.StopBits = StopBits.Two; } else { serialPort.StopBits = StopBits.One; } serialPort.DataBits = Convert.ToInt16(cbxDataBits.Text.Trim());//设置数据位 string s = cbxParity.Text.Trim(); //设置奇偶校验位 if (s.CompareTo("无") == 0) { serialPort.Parity = Parity.None; } else if (s.CompareTo("奇校验") == 0) { serialPort.Parity = Parity.Odd; } else if (s.CompareTo("偶校验") == 0) { serialPort.Parity = Parity.Even; } else { serialPort.Parity = Parity.None; } serialPort.ReadTimeout = -1;//设置超时读取时间 serialPort.RtsEnable = true; //定义DataReceived 事件,当串口收到数据后触发事件 serialPort.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived); if (rbnHex.Checked) { isHex = true; } else { isHex = false; } } private void btnOpenCom_Click(object sender, EventArgs e) { if (!isOpen) { if (!CheckPortSetting())//检测串口设置 { MessageBox.Show("串口未设置!", "错误提示"); return; } if (!isSetProperty)//串口未设置则设置串口 { SetPortProperty(); isSetProperty = true; } try { serialPort.Open(); //打开串口 btnOpenCom.Text = "关闭串口"; cbxCOMPort.Enabled = false;//关闭使能 cbxBaudRate.Enabled = false; cbxStopBits.Enabled = false; cbxParity.Enabled = false; cbxDataBits.Enabled = false; rbnChar.Enabled = false; rbnHex.Enabled = false; isOpen = true; serialPort.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);//串口接收处理函数 } catch { MessageBox.Show("串口打开失败!"); } } else { try { serialPort.Close(); //关闭串口 btnOpenCom.Text = "打开串口"; cbxCOMPort.Enabled = true;//打开使能 cbxBaudRate.Enabled = true; isOpen = false; } catch { MessageBox.Show("串口关闭失败!"); } } } //private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e) //{ // string str = serialPort.ReadExisting();//字符串方式读 // tbxRecvData.Text = "";//先清除上一次的数据 // tbxRecvData.Text += str; //} private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e) { System.Threading.Thread.Sleep(100);//延时 100ms 等待接收完数据 //this.Invoke 就是跨线程访问 ui 的方法,也是本文的范例 this.Invoke((EventHandler)(delegate { if (isHex == false) { tbxRecvData.Text += serialPort.ReadLine(); } else { Byte[] ReceivedData = new Byte[serialPort.BytesToRead]; //创建接收字节数组 serialPort.Read(ReceivedData, 0, ReceivedData.Length); //读取所接收到的数据 String RecvDataText = null; for (int i = 0; i < ReceivedData.Length - 1; i++) { RecvDataText += ("0x" + ReceivedData[i].ToString("X2") + " "); } tbxRecvData.Text += RecvDataText; } serialPort.DiscardInBuffer();//丢弃接收缓冲区数据 })); } private void btnSend_Click(object sender, EventArgs e) { //发送数据 if (serialPort.IsOpen) {//如果串口开启 if (tbxSendData.Text.Trim() != "")//如果框内不为空则 { serialPort.Write(tbxSendData.Text.Trim());//写数据 } else { MessageBox.Show("发送框没有数据"); } } else { MessageBox.Show("串口未打开"); } } private void btnCleanData_Click(object sender, EventArgs e) { tbxRecvData.Text = ""; tbxSendData.Text = ""; } } } 打开串口没有提示失败,但是单片机就不运行了。
C#winform中显示无法将类型为“System.Int64”的对象强制转换为类型“System.String”
![图片说明](https://img-ask.csdn.net/upload/201911/01/1572602195_548859.png) ![图片说明](https://img-ask.csdn.net/upload/201911/01/1572602210_226294.png) ``` string yinsu = ""; if (radioButton2.Checked == true) { yinsu = "紫外线"; } else if (radioButton1.Checked == true) { yinsu = "温度、振动"; } string id = System.Guid.NewGuid().ToString("N") + DateTime.Now.ToString("yyyyMMddHHmmss"); string str = "'" + txtName.Text + "'," + "'" + txtyunxinglicheng.Text + "'," + "'" + txtyingdu.Text + "'," + "'" + txtlashenqiangdu + "'," + "'" + txtladuanshenchanglv + "'," + "'" + yinsu + "'," + "'" + id + "'"; string sq = @"Data Source=" + dbPath; m = new SQLiteConnection(sq); m.Open(); string sql = "insert into " + tableName + " (传感器型号,运行里程,硬度,拉伸强度,拉断伸长率,因素,材料特性ID) values (" + str + ")"; SQLiteCommand command = new SQLiteCommand(sql, m); command.ExecuteNonQuery(); m.Close(); ``` 问题1:原本打算自动生成一个id(string),在系统管理界面添加一组数,结果在dataGridView上材料特性ID显示为0,而数据库里显示为很长的一串字符 问题二:按修改按钮后 ,在Addcailiaoquxian.form1.TabText = (string)Eachcailiao.Rows[i].Cells[7].Value;// 处显示无法将类型为“System.Int64”的对象强制转换为类型“System.String”。如何处理
android switch控件第一次被checked的时候没有反应
我的recyclerview里每一个item都包含一个switch控件,switch打开后会跑相应的代码并有toast弹出,而且我switch控件的初始值设定为false了,但是每一个新的item里的switch控件第一次被checked的时候代码并不会跑,但是再关闭再开,就好了,之后也都可以了,这是为什么?谢谢 以下是主程序代码和switch控件布局代码 ![图片说明](https://img-ask.csdn.net/upload/201908/01/1564654114_145874.png) ![图片说明](https://img-ask.csdn.net/upload/201908/01/1564654123_390650.png)
c# webbrowser 自动选择 radio问题
我想选中radio中指定选项,可是代码没生效,大家帮我看看哪里的问题呗 我的代码。外面的循环已经能够定位到指定题目,得到name,然后我用 ele.SetAttribute("checked", "checked");或者H_timu.SetAttribute("value", "RadioButton1");都不能选中指定选项。 ``` string subtext = alltext.Substring(a, 400); int b = subtext.IndexOf("name="); string timuname = subtext.Substring(b+5,18); HtmlElement H_timu = webBrowser1.Document.All[timuname]; textBox4.Text += timuname; H_timu.SetAttribute("value", "RadioButton1"); /* foreach (HtmlElement ele in webBrowser1.Document.GetElementsByTagName(timuname)) { textBox4.Text += "0"; if (ele.GetAttribute("value") == "RadioButton1") { ele.SetAttribute("checked", "checked"); } } */ ``` 网页radio内容,这里只列举一个,我已经实现了题目的定为, A:<input id="GridView1_ctl17_RadioButton1" type="radio" name="GridView1$ctl17$Sl" value="RadioButton1" /><label for="GridView1_ctl17_RadioButton1">A. which  </label> B:<input id="GridView1_ctl17_RadioButton2" type="radio" name="GridView1$ctl17$Sl" value="RadioButton2" /><label for="GridView1_ctl17_RadioButton2">B. with whom  </label> C:<input id="GridView1_ctl17_RadioButton3" type="radio" name="GridView1$ctl17$Sl" value="RadioButton3" /><label for="GridView1_ctl17_RadioButton3">C. whom  </label> D:<input id="GridView1_ctl17_RadioButton4" type="radio" name="GridView1$ctl17$Sl" value="RadioButton4" /><label for="GridView1_ctl17_RadioButton4">D. with which</label>
C#多线程读同一文件,写多个文件并更新进度条
代码的目的是启动3个task,通过调用C DLL中getSWMMout方法读取同一二级制文件中不同部分,写3个文件,NdeExtract和LinkExtract方法和SubExtract方法代码结构一致。 当多个checkBox都选中时,报错代码:托管调试助手 "FatalExecutionEngineError":“运行时遇到了错误。此错误的地址为 0x6cb8f121,在线程 0x3f58 上。错误代码为 0xc0000005。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈。”。请问怎么解决呢?在博客园提过同样的问题,但回答不太明白,如果3个task顺序执行应该怎么修改呢? 代码如下: ``` // Extract subcatch output values if checked if (chkSub.IsChecked == true) { progressBar1.Value = 0; // define file path for subcatchment extraction string subcatchOutPath = "subcatch.txt"; // instaniate a task for extraction var subTask = SubExtract(subcatchOutPath); } // Extract node output values if checked if (chkNode.IsChecked == true) { progressBar2.Value = 0; // define file path for node extraction string nodeOutPath = "node.txt"; // instaniate a task for extraction var nodeTask = NodeExtract(nodeOutPath); } // Extract linke output values if checked if (chkLink.IsChecked == true) { progressBar3.Value = 0; // define file path for link extraction string linkOutPath = "link.txt"; // instaniate a task for extraction var linkTask = LinkExtract(linkOutPath); } async Task SubExtract(string outPathSub) // // Purpose: extract variable outcome for subcatchment // { int errSubID; int cntSub = 0; int sumSubPrd = Nsubcatch * extNperiod; // total for subcatchment outcome float subValue = 0F; // outcome value for subcatchment extraction // create file stream for writing file FileStream fsSubcatch = new FileStream(outPathSub, FileMode.Create); StreamWriter swSubcatch = new StreamWriter(fsSubcatch); await Task.Run(() => { for (int i = 0; i < Nsubcatch; ++i) { for (int j = 1; j <= extNperiod; ++j) { for (int k = 0; k < NsubcatchVar; ++k) { // getSWMMout为C DLL中方法 errSubcatch = getSWMMresult(SUBCATCH, i, k, j, ref subValue); } // update progressbar and textBlock value cntSub++; progressBar1.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, (Action)delegate () { progressBar1.Value = cntSub * 100 / sumSubPrd; }); } } // empty buffer swSubcatch.Flush(); // close stream swSubcatch.Close(); fsSubcatch.Close(); GC.Collect(); }); } ```
c#winform编写上位机中实现动态坐标
在串口接收到一组一组的横纵坐标值,想把每一组横纵坐标分开使用,在两个textbox控件中分别显示横纵坐标。但是发现并没有实时更新都是只是串口接收到的第一组数据![图片说明](https://img-ask.csdn.net/upload/201705/19/1495178468_90227.png)![图片说明](https://img-ask.csdn.net/upload/201705/19/1495178421_276445.png) 程序如下: private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e) { byte[] ReceivedData = new byte[sp.BytesToRead];//创建接收字节数组 sp.Read(ReceivedData, 0, ReceivedData.Length);//读取所接收到的数据 receivedDatas.AddRange(ReceivedData); textBox3.Text = (Convert.ToInt32(textBox3.Text) + ReceivedData.Length).ToString(); if (checkBox2.Checked) { textBox1.Text = Class1.ByteTo16Str(receivedDatas.ToArray()); } else { textBox1.Text = Encoding.Default.GetString(receivedDatas.ToArray()); //让文本框获取焦点 string a = Encoding.Default.GetString(receivedDatas.ToArray()); string[] sArray = a.Split(','); // textBox15.Text = a; textBox15.Text = textBox15.Text +"\n"+sArray[0]; textBox16.Text = textBox16.Text + "\n" + sArray[1]; ![图片说明](https://img-ask.csdn.net/upload/201705/19/1495177633_459101.png) this.textBox15.Focus(); //设置光标的位置到文本尾 this.textBox15.Select(this.textBox1.TextLength, 0); //滚动到控件光标处 this.textBox15.ScrollToCaret(); this.textBox16.Focus(); //设置光标的位置到文本尾 this.textBox16.Select(this.textBox1.TextLength, 0); //滚动到控件光标处 this.textBox16.ScrollToCaret(); this.textBox1.Focus(); //设置光标的位置到文本尾 this.textBox1.Select(this.textBox1.TextLength, 0); //滚动到控件光标处 this.textBox1.ScrollToCaret(); } 是需要timer控件还是怎么样可以实现呢?
关于C#关闭窗口的问题
我想实现在点击关闭按钮时弹出窗口,提示关闭还是最小化至托盘,我新建了一个窗体,用来当做对话框,在closed事件中弹出它,使用showdialog()方式。但是当我不论点击任何按钮时,他都会退出。下面是我的代码,请教大神如何实现这一功能? //这是点击对话框中确定按钮事件 private void Btn_OK_Click(object sender, EventArgs e) { if(CB_NoTip.Checked) { UtilsClass.OperateAppConfig("IsTip", "false"); } if (RB_MinTask.Checked) { UtilsClass.OperateAppConfig("IsMinTask", "true"); this.DialogResult = DialogResult.Yes; this.Close(); } else if(RB_Exit.Checked) { UtilsClass.OperateAppConfig("IsMinTask", "false"); this.DialogResult = DialogResult.No; } } //这是点击对话框上的取消按钮事件 private void Btn_Exit_Click(object sender, EventArgs e) { DialogResult = DialogResult.None; } //这是主窗体中点击关闭按钮的form_closed事件。 private void MainWindow_FormClosing(object sender, FormClosingEventArgs e) { string isTip = UtilsClass.OperateAppConfig("IsTip"); if (isTip == "true") { ExitWindow exit = new ExitWindow(); DialogResult dr = exit.ShowDialog(); if (DialogResult.Yes == dr) { } else if (DialogResult.No == dr) { Application.Exit(); } else if (DialogResult.None == dr) { exit.Close(); } } else { Application.Exit(); } } 我尝试过使用closing事件,但是在点击对话框上的确定按钮时总会再次弹出对话框
C#连接串口接受数据显示问题。很急。
C#串口上位机工具,接收到发过来的一串16进制数据,格式如下: FA AF 00 08 FF 31 32 33 34 FA AF 00 07 FF 35 36 后面可能还会有FA AF开头的 这串数据分析如下:识别FA AF为固定开始的头,紧接着后面的两个00 08为第一个整个字符串实际长度(FA AF 00 08 01 31 32 33 34),FF为固定的数据,不用管。 FF后面对应的数据为实际需要输出显示的数据(31 32 33 34),长度为4,然后这4个数据以正常的ASCII码显示出来。 第一个(FA AF 00 08 FF 31 32 33 34)实际需要的数据31 32 33 34对应的ASCII码为1234 第二个(FA AF 00 07 FF 35 36)实际需要的数据35 36对应的ASCII码为56 所以串口最终输出在textbox中显示为123456 以下代码是接受数据并显示在textbox的代码。怎么修改能达到以上的要求? ``` private void Com_DataReceived(object sender, SerialDataReceivedEventArgs e) { byte[] ReDatas = new byte[ComDevice.BytesToRead]; ComDevice.Read(ReDatas, 0, ReDatas.Length);//读取数据 this.AddData(ReDatas);//输出数据 } /// <summary> /// 添加数据 /// </summary> /// <param name="data">字节数组</param> public void AddData(byte[] data) { if (rbtnHex.Checked) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < data.Length; i++) { sb.AppendFormat("{0:x2}" + " ", data[i]); } AddContent(sb.ToString().ToUpper()); } else if (rbtnASCII.Checked) { AddContent(new ASCIIEncoding().GetString(data)); } else if (rbtnUTF8.Checked) { AddContent(new UTF8Encoding().GetString(data)); } else if (rbtnUnicode.Checked) { AddContent(new UnicodeEncoding().GetString(data)); } else {} lblRevCount.Invoke(new MethodInvoker(delegate { lblRevCount.Text = (int.Parse(lblRevCount.Text) + data.Length).ToString(); })); } /// <summary> /// 输入到显示区域 /// </summary> /// <param name="content"></param> private void AddContent(string content) { this.BeginInvoke(new MethodInvoker(delegate { if(chkAutoLine.Checked && txtShowData.Text.Length>0) { txtShowData.AppendText("\r\n"); } txtShowData.AppendText(content); })); } ```
菜鸟求优化这坨代码C#
if(this.queryTreeView.Nodes[0].Checked == true) { return; } else if (this.queryTreeView.Nodes[0].Nodes[0].Checked == true && this.queryTreeView.Nodes[0].Nodes[1].Checked == true && this.queryTreeView.Nodes[0].Nodes[2].Checked == false && this.queryTreeView.Nodes[0].Nodes[3].Checked == false) { this.filterTreeBn = this.queryTreeView.Nodes[0].Nodes[0].Tag.ToString() + " OR " + this.queryTreeView.Nodes[0].Nodes[1].Tag.ToString(); } else if (this.queryTreeView.Nodes[0].Nodes[0].Checked == true && this.queryTreeView.Nodes[0].Nodes[1].Checked == false && this.queryTreeView.Nodes[0].Nodes[2].Checked == true && this.queryTreeView.Nodes[0].Nodes[3].Checked == false) { this.filterTreeBn = this.queryTreeView.Nodes[0].Nodes[0].Tag.ToString() + " OR " + this.queryTreeView.Nodes[0].Nodes[2].Tag.ToString(); } else if (this.queryTreeView.Nodes[0].Nodes[0].Checked == true && this.queryTreeView.Nodes[0].Nodes[1].Checked == false && this.queryTreeView.Nodes[0].Nodes[2].Checked == false && this.queryTreeView.Nodes[0].Nodes[3].Checked == true) { this.filterTreeBn = this.queryTreeView.Nodes[0].Nodes[0].Tag.ToString() + " OR " + this.queryTreeView.Nodes[0].Nodes[3].Tag.ToString(); } else if (this.queryTreeView.Nodes[0].Nodes[0].Checked == false && this.queryTreeView.Nodes[0].Nodes[1].Checked == true && this.queryTreeView.Nodes[0].Nodes[2].Checked == true && this.queryTreeView.Nodes[0].Nodes[3].Checked == false) { this.filterTreeBn = this.queryTreeView.Nodes[0].Nodes[1].Tag.ToString() + " OR " + this.queryTreeView.Nodes[0].Nodes[2].Tag.ToString(); } else if (this.queryTreeView.Nodes[0].Nodes[0].Checked == false && this.queryTreeView.Nodes[0].Nodes[1].Checked == true && this.queryTreeView.Nodes[0].Nodes[2].Checked == false && this.queryTreeView.Nodes[0].Nodes[3].Checked == true) { this.filterTreeBn = this.queryTreeView.Nodes[0].Nodes[1].Tag.ToString() + " OR " + this.queryTreeView.Nodes[0].Nodes[3].Tag.ToString(); } else if (this.queryTreeView.Nodes[0].Nodes[0].Checked == false && this.queryTreeView.Nodes[0].Nodes[1].Checked == false && this.queryTreeView.Nodes[0].Nodes[2].Checked == true && this.queryTreeView.Nodes[0].Nodes[3].Checked == true) { this.filterTreeBn = this.queryTreeView.Nodes[0].Nodes[2].Tag.ToString() + " OR " + this.queryTreeView.Nodes[0].Nodes[3].Tag.ToString(); } else if (this.queryTreeView.Nodes[0].Nodes[0].Checked == true && this.queryTreeView.Nodes[0].Nodes[1].Checked == true && this.queryTreeView.Nodes[0].Nodes[2].Checked == true && this.queryTreeView.Nodes[0].Nodes[3].Checked == false) { this.filterTreeBn = this.queryTreeView.Nodes[0].Nodes[0].Tag.ToString() + " OR " + this.queryTreeView.Nodes[0].Nodes[1].Tag.ToString() + " OR " + this.queryTreeView.Nodes[0].Nodes[2].Tag.ToString(); } else if (this.queryTreeView.Nodes[0].Nodes[0].Checked == true && this.queryTreeView.Nodes[0].Nodes[1].Checked == true && this.queryTreeView.Nodes[0].Nodes[2].Checked == false && this.queryTreeView.Nodes[0].Nodes[3].Checked == true) { this.filterTreeBn = this.queryTreeView.Nodes[0].Nodes[0].Tag.ToString() + " OR " + this.queryTreeView.Nodes[0].Nodes[1].Tag.ToString() + " OR " + this.queryTreeView.Nodes[0].Nodes[3].Tag.ToString(); } else if (this.queryTreeView.Nodes[0].Nodes[0].Checked == true && this.queryTreeView.Nodes[0].Nodes[1].Checked == false && this.queryTreeView.Nodes[0].Nodes[2].Checked == true && this.queryTreeView.Nodes[0].Nodes[3].Checked == true) { this.filterTreeBn = this.queryTreeView.Nodes[0].Nodes[0].Tag.ToString() + " OR " + this.queryTreeView.Nodes[0].Nodes[2].Tag.ToString() + " OR " + this.queryTreeView.Nodes[0].Nodes[3].Tag.ToString(); } else if (this.queryTreeView.Nodes[0].Nodes[0].Checked == false && this.queryTreeView.Nodes[0].Nodes[1].Checked == true && this.queryTreeView.Nodes[0].Nodes[2].Checked == true && this.queryTreeView.Nodes[0].Nodes[3].Checked == true) { this.filterTreeBn = this.queryTreeView.Nodes[0].Nodes[1].Tag.ToString() + " OR " + this.queryTreeView.Nodes[0].Nodes[2].Tag.ToString() + " OR " + this.queryTreeView.Nodes[0].Nodes[3].Tag.ToString(); }
C#串口数据读取问题求助
用C#中的一个serialport类读取cc2431传感器通过usb(com口)传来的数据,程序代码如下 void comm_DataReceived(object sender, SerialDataReceivedEventArgs e) { int n = comm.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致 byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据 received_count += n;//增加接收计数 comm.Read(buf, 0, n);//读取缓冲数据 builder.Clear();//清除字符串构造器的内容 //因为要访问ui资源,所以需要使用invoke方式同步ui。 this.Invoke((EventHandler)(delegate { //判断是否是显示为16禁止 if (checkBoxHexView.Checked) { //依次的拼接出16进制字符串 foreach (byte b in buf) { builder.Append(b.ToString("X2") + " "); } } else { //直接按ASCII规则转换成字符串 builder.Append(Encoding.ASCII.GetString(buf)); } //追加的形式添加到文本框末端,并滚动到最后。 this.txGet.AppendText(builder.ToString()); //修改接收计数 labelGetCount.Text = "Get:" + received_count.ToString(); })); } 会读取到如下数据71 09 FC 08 00 F1,而实际上用配套的串口调试助手得到的一串数据时这样的:04 C0 E0 D8 27 3B 03 23 4D 80 03 B0 02 00 4C 00 40 7F C0 4C 32 32 00 42 24 FF 不知道程序哪里应该改动,才能得到同串口调试助手一样的数据
C# 代码错误,未将对象引用设置到对象的实例
private void btnSend_Click(object sender, EventArgs e) { if (cbTimeSend.Checked) { tmSend.Enabled = true; } else { tmSend.Enabled = false; } if (!sp1.IsOpen) //如果没打开 { MessageBox.Show("请先打开串口!", "Error"); return; } // string strSend = null; String strSend = txtSend.Text.ToString(); if (radio1.Checked == true) //“HEX发送” 按钮 { //处理数字转换 string sendBuf = strSend; string sendnoNull = sendBuf.Trim(); string sendNOComma = sendnoNull.Replace(',', ' '); //去掉英文逗号 string sendNOComma1 = sendNOComma.Replace(',', ' '); //去掉中文逗号 string strSendNoComma2 = sendNOComma1.Replace("0x", ""); //去掉0x strSendNoComma2.Replace("0X", ""); //去掉0X string[] strArray = strSendNoComma2.Split(' '); int byteBufferLength = strArray.Length; for (int i = 0; i < strArray.Length; i++) { if (strArray[i] == "") { byteBufferLength--; } } // int temp = 0; byte[] byteBuffer = new byte[byteBufferLength]; int ii = 0; for (int i = 0; i < strArray.Length; i++) //对获取的字符做相加运算 { Byte[] bytesOfStr = Encoding.Default.GetBytes(strArray[i]); int decNum = 0; if (strArray[i] == "") { //ii--; //加上此句是错误的,下面的continue以延缓了一个ii,不与i同步 continue; } else { decNum = Convert.ToInt32(strArray[i], 16); //atrArray[i] == 12时,temp == 18 } try //防止输错,使其只能输入一个字节的字符 { byteBuffer[ii] = Convert.ToByte(decNum); } catch (System.Exception ex) { MessageBox.Show("字节越界,请逐个字节输入!", "Error"); tmSend.Enabled = false; return; } ii++; } sp1.Write(byteBuffer, 0, byteBuffer.Length); } else //以字符串形式发送时 { sp1.WriteLine(txtSend.Text); //写入数据 } } void sp1_DataReceived(object sender, SerialDataReceivedEventArgs e) { //输出当前时间 DateTime dt = DateTime.Now; txtReceive.Text += dt.GetDateTimeFormats('f')[0].ToString() + "\r\n"; txtReceive.SelectAll(); txtReceive.SelectionColor = Color.Blue; //改变字体的颜色 try { byte[] receivedData = new byte[sp1.BytesToRead]; //创建接收字节数组 sp1.Read(receivedData, 0, receivedData.Length); //读取数据 if (receivedData.Length == 0) return; sp1.DiscardInBuffer(); //清空SerialPort控件的Buffer if (receivedData.Length == 3 && receivedData[0] == 0xFF && receivedData[1] == _totalBytes[1] && receivedData[2] == 0x00) { //_totalBytes[1] = Convert.ToByte(_totalBytes[1] == 0xB5 ? 0xB6 : 0xB5); _totalBytes[1] = Convert.ToByte(_totalBytes[1] == 0xB6 ? 0xB5 : 0xB6); //_size += _totalBytes[1] == 0xB5 ? 512 : 0; _size += _totalBytes[1] == 0xB6 ? 512 : 0; SendBytes(false); } else { //发送失败 } string strRcv = null; if (rdSendStr.Checked) { strRcv = sp1.Encoding.GetString(receivedData); } else { //int decNum = 0;//存储十进制 for (int i = 0; i < receivedData.Length; i++) //窗体显示 { strRcv += receivedData[i].ToString("X2"); //16进制显示 } } txtReceive.Text += strRcv + "\r\n"; } catch (System.Exception ex) { MessageBox.Show(ex.Message, "出错提示"); txtSend.Text = ""; } } ``` 串口发送一段指定的字符串,串口接收,串口收到回复消息,提示出错。未将对象引用设置到对象的实例 ``` ![图片说明](https://img-ask.csdn.net/upload/201712/05/1512440456_874167.png) ``` ``` ``` ```
c#+jquery+ajax实现注册登录功能
数据库是sql server 客户端和服务器端怎么交换数据 页面代码如下 ``` <nav class="main_nav"> <ul> <li ><a class="cd-signin" href="#0">登录</a></li> <li ><a class="cd-signup" href="#0">注册</a></li> </ul> </nav> <div class="cd-user-modal"> <div class="cd-user-modal-container"> <ul class="cd-switcher"> <li ><a href="#0">用户登录</a></li> <li ><a href="#0">注册新用户</a></li> </ul> <div id="cd-login"><!-- 登录表单 --> <form class="cd-form" method="post"> <p class="fieldset"> <label class="image-replace cd-username" for="signin-username-email">姓名或邮箱</label> <input class="full-width has-padding has-border" id="signin-username" type="text" placeholder="输入姓名或邮箱" > </p> <p class="fieldset"> <label class="image-replace cd-password" for="signin-password">密码</label> <input class="full-width has-padding has-border" id="signin-password" type="text" placeholder="输入密码"> </p> <p class="fieldset"> <input type="checkbox" id="remember-me" checked> <label for="remember-me">记住登录状态</label> </p> <p class="fieldset"> <input class="full-width2" id="login" type="submit" value="登 录"> </p> </form> </div> <div id="cd-signup"> <!-- 注册表单 --> <form class="cd-form" method="post"> <p class="fieldset"> <label class="image-replace cd-username" for="signup-username">姓名</label> <input class="full-width has-padding has-border" id="signup-username" type="text" placeholder="输入姓名"> </p> <p class="fieldset"> <label class="image-replace cd-email" for="signup-email">邮箱</label> <input class="full-width has-padding has-border" id="signup-email" type="email" placeholder="输入mail"> </p> <p class="fieldset"> <label class="image-replace cd-password" for="signup-password">密码</label> <input class="full-width has-padding has-border" id="signup-password" type="text" placeholder="输入密码"> </p> <p class="fieldset"> <input type="checkbox" id="accept-terms"> <label for="accept-terms">我已阅读并同意 <a href="#0">用户协议</a></label> </p> <p class="fieldset"> <input class="full-width2" id="register" type="submit" value="注册新用户"> </p> </form> </div> <a href="#0" class="cd-close-form">关闭</a> </div> </div> ``` js代码如下: ``` jQuery(document).ready(function ($) { var $form_modal = $('.cd-user-modal'), $form_login = $form_modal.find('#cd-login'), $form_signup = $form_modal.find('#cd-signup'), $form_modal_tab = $('.cd-switcher'), $tab_login = $form_modal_tab.children('li').eq(0).children('a'), $tab_signup = $form_modal_tab.children('li').eq(1).children('a'), $main_nav = $('.main_nav'); //弹出窗口 $main_nav.on('click', function (event) { if ($(event.target).is($main_nav)) { // on mobile open the submenu $(this).children('ul').toggleClass('is-visible'); } else { // on mobile close submenu $main_nav.children('ul').removeClass('is-visible'); //show modal layer $form_modal.addClass('is-visible'); //show the selected form ($(event.target).is('.cd-signup')) ? signup_selected() : login_selected(); } }); //关闭弹出窗口 $('.cd-user-modal').on('click', function (event) { if ($(event.target).is($form_modal) || $(event.target).is('.cd-close-form')) { $form_modal.removeClass('is-visible'); } }); //使用Esc关闭弹出窗口 $(document).keyup(function (event) { if (event.which == '27') { $form_modal.removeClass('is-visible'); } }); //切换表单 $form_modal_tab.on('click', function (event) { event.preventDefault(); ($(event.target).is($tab_login)) ? login_selected() : signup_selected(); }); function login_selected() { $form_login.addClass('is-selected'); $form_signup.removeClass('is-selected'); $form_forgot_password.removeClass('is-selected'); $tab_login.addClass('selected'); $tab_signup.removeClass('selected'); } function signup_selected() { $form_login.removeClass('is-selected'); $form_signup.addClass('is-selected'); $form_forgot_password.removeClass('is-selected'); $tab_login.removeClass('selected'); $tab_signup.addClass('selected'); } }); //credits http://css-tricks.com/snippets/jquery/move-cursor-to-end-of-textarea-or-input/ jQuery.fn.putCursorAtEnd = function () { return this.each(function () { // If this function exists... if (this.setSelectionRange) { // ... then use it (Doesn't work in IE) // Double the length because Opera is inconsistent about whether a carriage return is one character or two. Sigh. var len = $(this).val().length * 2; this.setSelectionRange(len, len); } else { // ... otherwise replace the contents with itself // (Doesn't work in Google Chrome) $(this).val($(this).val()); } }); }; ``` 接下来该怎么写功能 与数据库交换数据 最好有详细代码 谢谢了!
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
有哪些让程序员受益终生的建议
从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。 敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自由,如何在工作中游刃有余,这篇文章很长,但绝对是精品,记得帮我点赞哦!!!! 一腔肺腑之言,能看进去多少,就看你自己了!!! 目录: 在校生篇: 为什么要尽量进大厂? 如何选择语言及方...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
YouTube排名第一的励志英文演讲《Dream(梦想)》
Idon’t know what that dream is that you have, I don't care how disappointing it might have been as you've been working toward that dream,but that dream that you’re holding in your mind, that it’s po...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
相关热词 c#委托 逆变与协变 c#新建一个项目 c#获取dll文件路径 c#子窗体调用主窗体事件 c# 拷贝目录 c# 调用cef 网页填表c#源代码 c#部署端口监听项目、 c#接口中的属性使用方法 c# 昨天
立即提问

相似问题

0
c#异步通讯五子棋 双方倒计时怎么写
1
C#非静态引用属性 窗体传值 类已经实例化,但是不能引用
2
C#窗体实现在线答题系统时代码无bug能运行,但不显示题目信息,求问怎么回事?
4
css怎么实现自动轮播图片?
3
C#多线程读同一文件,写多个文件并更新进度条
0
android switch控件第一次被checked的时候没有反应
1
weui 中js 初始化空间,对控件上的自定义组件操作不起作用如何处理
1
c#编写的串口助手打开串口32单片机立刻黑屏,急求
2
C#winform中显示无法将类型为“System.Int64”的对象强制转换为类型“System.String”
1
为什么我添加完数据后,数据库里的没问题,在软件的datagridview上显示的不对
1
当点击否的时候默认为不达标,并且不能更改,现在我写的是点击否默认为不达标,但还是可以把不达标改成达标
2
在C#winform中怎么让添加一些参数后,这行数据的ID自动加一
1
Qt 中一段代码看不懂 C++
1
qt 运行出来的框图有残缺
4
C# 如何将一个类中全部字段添加到List中(字段为自定义类,引用类型,不是值类型)?
1
js实现购物车简单功能怎么相加数量?
1
bootstrap table怎么想java传参数
1
apache Base64源码最后validateCharacter方法为什么会&上补0的个数?
1
vb.net 提示“应有{”,小白求教。
1
c# 线程间操作无效 从不是创建控件“listView1”的线程访问它