c#窗体,如何每次点击button,label内容都会改变

是if语句那个,我上课没听清,求助!
运行结果,点击一次button,label内容改变一次,是按设定的内容改变

1个回答

在Button的click里面写:
label1.Text = 设定的内容;
如果你需要判断什么条件,才要用到if

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
如何调用listbox中某行的内容给label 和 button,同时是两边数值是同步的?c# winform
listbox中调取某行(例如第三行)的内容给另一个窗体(非子窗体)的button 和label,同时修改了listbox那行内容,button和label同步改变?并且如果该值被删除了,button和label内容也被删除。
C# button控制label移动
要求点击button使得label平移,到窗体边缘时,反向移动。(每点一次移动一次,不是自动滴。) ![图片说明](https://img-ask.csdn.net/upload/201910/03/1570104749_786701.png) 实际做到这里,后面做了很多尝试,都不行。
c# winfrom项目,如何实现在form窗体中点击鼠标右键自动关闭该窗体
在C# Winfrom项目中,两个form窗体(form1、form2), 在form1窗体中有个Button控件(实现点击该按钮弹出form2窗体)。 在form2窗体中包括有一个Panel控件,在Panel控件中放置一个Label控件以及三个Button控件(button1、button2以及button3)。 目前遇到点困难: 如果用户鼠标点击在了form2窗体中,用户再点击鼠标右键,可以响应form2窗体的鼠标右键事件,使form2窗体自动关闭。 如果用户鼠标点击了form2窗体中的button1、button2、button3按钮后,用户再点击鼠标右键,就无法响应form2窗体的鼠标右键事件(无法关闭form2窗体)。 请问怎么样实现鼠标的焦点在form2窗体中的button1、button2、button3按钮后,如何响应form2窗体的鼠标右键事件,使form2窗体自动关闭。 请各位帮忙看看,有没有相关的解决办法。谢谢!
C# winform项目,退出应用程序时,报"集合已修改,可能无法执行枚举操作。"错误信息。
在C# winform项目中,有两个form窗体(form1、form2),在form1中有个两个button按钮。 在form1窗体中,点击button1弹出一个form2窗体,点击button2退出整个应用程序。 目前遇到的问题是,在form1窗体中点击button1弹出一个form2窗体后再点击button2退出整个应用程序时,报"集合已修改,可能无法执行枚举操作。"错误信息。 请问如何修改退出整个应用程序代码,谢谢! 附点击button1弹出一个form2窗体代码: form2 frmmess= new form2(); Point pi = new Point(); Point p1 = label1.PointToScreen(label1.Location); Point p2 = label1.Location; pi.X = System.Convert.ToInt32(p1.X - p2.X) + 20; pi.Y = System.Convert.ToInt32(p1.Y - p2.Y) + 20; frmmess.Location = pi; if (frmmess == null || frmmess.IsDisposed) { frmmess = new FrmMessage(); } frmmess.Show(); 附点击button2退出整个应用程序代码: System.Windows.Forms.Application.Exit();
C#窗体实现在线答题系统时代码无bug能运行,但不显示题目信息,求问怎么回事?
数据库那边没有问题,连接语句在别的窗体也能用,怀疑是questionIndex的问题,求大神帮忙看下怎么改 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Data.SqlClient; using System.Windows.Forms; using System.Collections; namespace graduationproject { public partial class PsychologicalTest : Form { public int questionIndex = 1; public PsychologicalTest() { InitializeComponent(); } private void PsychologicalTest_Load(object sender, EventArgs e) { timer1.Start(); // 启动计时器 GetQuestionDetails(); // 显示题目信息 CheckOption();    // 如果题目已经答过,让相应的选项选中 CheckBtnNext();   // 确定是否到了最后一题 } private void CheckBtnNext() { // 如果达到20题,就让“下一题”按钮的文字显示为“提交” if (questionIndex >= QuizHelper.selectedQuestionIds.Length) { button2.Text = "提交"; } } private void button2_Click(object sender, EventArgs e) { // 如果没有到最后一题,就继续显示新题目信息 if (questionIndex < QuizHelper.selectedQuestionIds.Length) { questionIndex++; GetQuestionDetails(); // 显示试题信息 CheckOption(); // 如果题目已经答过,让相应的选项选中 CheckBtnNext();   // 确定是否到了最后一题 } else // 否则,打开答题卡窗体 { OpenResultCard(); } } private void OpenResultCard() { PsychologicalTestResult psychologicalTestResult = new PsychologicalTestResult(); psychologicalTestResult.MdiParent = this.MdiParent; psychologicalTestResult.Show(); this.Close(); } private void timer1_Tick(object sender, EventArgs e) { int minute; // 当前的分钟 int second; // 秒 // 如果还有剩余时间,就显示剩余的分钟和秒数 if (QuizHelper.remainSeconds > 0) { QuizHelper.remainSeconds--; minute = QuizHelper.remainSeconds / 60; second = QuizHelper.remainSeconds % 60; label4.Text = string.Format("{0:00}:{1:00}", minute, second); } // 否则,就提示交卷 else { timer1.Stop(); MessageBox.Show("时间到了!", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); this.Close(); } } private void radioButton_Click(object sender, EventArgs e) { QuizHelper.studentAnswers[questionIndex] = Convert.ToString(((RadioButton)sender).Tag); } public void GetQuestionDetails() { // 显示当前的题目信息 label1.Text = string.Format("第{0}题:", questionIndex); // 查询题目信息的sql语句 string sql = "SELECT Question FROM PsyQuestion WHERE QNumber=questionIndex "; SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=graduationproject;Integrated Security=true"); try { conn.Open(); SqlCommand command = new SqlCommand(sql, conn); SqlDataReader reader = command.ExecuteReader(); if (reader.Read()) { label3.Text = reader["Question"].ToString(); } reader.Close(); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { DBHelper.connection.Close(); } } private void CheckOption() { switch (QuizHelper.studentAnswers[questionIndex]) { case "A": radioButton1.Checked = true; break; case "B": radioButton2.Checked = true; break; case "C": radioButton3.Checked = true; break; default: radioButton1.Checked = false; radioButton2.Checked = false; radioButton3.Checked = false; break; } } } }
C# 如何将自定义控件添加到窗体?
最近想山寨一个下载软件,(下载中)任务列表想用自定义控件来实现,但不知道如何自定义一个任务列表控件(能在列表项中添加link,button,label等控件)。 最好能有C#自定义控件的电子书!谢谢!
C# Winfrom项目,如何在from窗体中控制两个timer控件时间的同步显示
在C# Winfrom项目中,一个from窗体,两个timer控件(timer1和timer2),两个Label控件(labe1和label2), timer1是实现0到1分钟的倒计时显示在显示labe1中,timer2是实现到1分钟后自动显示当前时间到label2中. 两个button控件(button1和button2)。button1和button2分别控制timer1的开始和暂停。 timer1.Interval =1000(1秒钟). timer2.Interval = 60000(一分钟) 点击button2先暂停timer1的倒计时显示,后再点击button1开始timer1继续显示倒计时。但是发现timer1和timer2控件显示的频率不一样。 timer1跑得比timer2来的快,代码如下,请问如何处理,谢谢。 开始按钮 button1_click: timer1.Enabled = true; timer2.Enabled = true; =============================== 暂停按钮 button2_click: timer1.Enabled = false; timer2.Enabled = false; ================================== 显示倒计时: timer1_Tick: TimeSpan ts = new TimeSpan(0, 1, 0); //一分钟 String str = ts.Hours.ToString() + ":" + ts.Minutes.ToString() + ":" + ts.Seconds.ToString(); label1.Text = "控制窗体:" + str + ":" + ts.Minutes.ToString(); ts = ts.Subtract(new TimeSpan(0, 0, 1));//每隔一秒减去一秒 =============================================== 显示当前时间: timer2_Tick: DateTime dt = DateTime.Now; string tmpTime = string.Format("{0:F}", dt); label2.Text = tmpTime;
求助 ,关于C# winform窗体串口在读取一组参数后再一次读取另一组参数的问题
有两个按钮,一个是“开启基本数据按钮设为button1”,另一个是“读取ListBox内部 数据的内容“设为button2,设定是先开启button1接收基本数据后才能开启button2接 收ListBox内的数据,接收协议一共有5位,分别是报头,符号位,数据位,数据位,校验位(没有长度位),当开启button1后界面上的基本数据的TextBox值会不断发生变化。 。当点击button2后(会有个“正在发送,请等待5s”的一个winform窗口弹出。当第二 次再次接收到数据后,会把协议转换成数据添加到ListBox中,但问题来了:为什么有时 点击button2后接收到的数据中ListBox的第一行数据有时是0没收到数据,有时候会读 到数??????????????????? 我这里button1的基本原理是给控制器发送一个协议,控制器收到后吧几个基本数据的 协议发送给winform窗口并将协议转换为基本数据记录到TextBox内,这时数据是无限 接收的,从而几个基本数据会不断地有变化。button2和button1原理类似都是发送一 个协议而给ListBox发送数据,发送完成后退出窗口,ListBox的所有行的值都变化之后 继续接收button1的基础数据。 接收代码: int S, A, B, C, D; private List<byte> memory = new List<byte>(4096); private byte[] bufferbyte = new byte[5]; private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { if (Closing) return; Control.CheckForIllegalCrossThreadCalls = false; int n = comm.BytesToRead; Byte[] bytes = new Byte[n]; r_count += n;//记录接收的字节 comm.Read(bytes, 0, n); try { this.Invoke((EventHandler)delegate { if (n > 0) { #region 协议解析/分析数据 //<协议解析> bool data_1_catched = false;//缓存记录数据是否捕获到 memory.AddRange(bytes);//缓存数据 while (memory.Count >= 2)//至少要包含头(1字节)+校验(1字节) { if (memory[0] == 0x88) { if (memory.Count < 5) break; //<数据校验> if ((memory[4] != (memory[1] + memory[2] + memory[3]) % 256) && (memory[4] != (memory[1] - 128 + memory[2] + memory[3]) % 256)) { memory.RemoveRange(0, 5); continue; } memory.CopyTo(0, bufferbyte, 0, 5); data_1_catched = true; memory.RemoveRange(0, 5); //<分析数据> if (data_1_catched) { #region 接收协议定义,用于将协议转化为数据 ............................. #endregion #region 将基本数据转化并填充到TextBox ............................. #endregion #region 将ListBox数据协议转化并填充到ListBox ............................. #endregion } } }); Button1方法比较简单,就是两句话: SendData("88", "FF", "01", "01", "01", 10);//是发送协议方法 周期为10ms comm.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived); Button2方法: private void ReadListBoxData_Click(object sender, EventArgs e) { WaitingForm waitf = new WaitingForm(); waitf.ShowIcon = false; waitf.label1.Text = "正在处理,请稍后......"; waitf.Show(); //如果不加上此句话,新窗体加载的内容都在队列中等待而不会绘制,从而导致新窗体没有内容。加上的话,新窗体会重新绘制 Application.DoEvents(); for (int ti = 0; ti < 4; ti++) { SendData("88", "FF", "04", "04", "07", 1000); } Thread.Sleep(4000); if (IsNull(bufferbyte) == true) { MessageBox.Show("重复超时,重新读取"); } waitf.Dispose(); //接受完ListBox的数据后,继续接收基本数据 SendData("88", "FF", "01", "01", "01", 10);// comm.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived); } 最大的问题再说一下,就是ListBox的第一行数据有的时候能收到数有时候收不到数,但是自己通过把数据转化到字符串框之后,发现第一列的协议都没有问题, 怀疑是和之前的基本数据协议的尾端发生冲突了,求解决办法?? 现在有一个方法是协商控制器,在发送第一组数据之前添加个5位保护协议。有没有 更好的方法???
求教一个C#小程序挺急的。
登录窗体就是用户名密码两个label,两个textbox两个button。完全没思路。
C#非静态引用属性 窗体传值 类已经实例化,但是不能引用
其中一个窗体代码 Form3 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 WindowsFormsApp1 { public partial class Form3 : Form { public Counter c1 { get { Counter c1 = new Counter(); c1.dataok = this.intok; c1.datapass = this.intpass; c1.datano = this.intno; c1.datatotal = this.inttotal; return c1; } set { Counter c1 = new Counter(); c1.dataok = this.intok; c1.datapass = this.intpass; c1.datano = this.intno; c1.datatotal = this.inttotal; } } //设置三个对应认可度的变量并赋初值 public int intok = 0; public int intpass = 0; public int intno = 0; public int inttotal = 0; public Form3() { InitializeComponent(); } private void radioButton1_CheckedChanged(object sender, EventArgs e) { if (this.radioButton1.Checked) { this.intok = this.intok + 1; } } private void radioButton2_CheckedChanged(object sender, EventArgs e) { if (this.radioButton2.Checked) { this.intpass = this.intpass + 1; } } private void radioButton3_CheckedChanged(object sender, EventArgs e) { if (this.radioButton3.Checked) { this.intno = this.intno + 1; } } private void Form3_Load(object sender, EventArgs e) { //默认初始未选中 this.radioButton1.Checked = false; this.radioButton2.Checked = false; this.radioButton3.Checked = false; } //当三个按钮有变化时自加 private void button1_Click(object sender, EventArgs e) { //提交时累加 并关闭调查窗口 显示窗口一 if (radioButton1.Checked) c1.dataok++; if (radioButton2.Checked) c1.datapass++; if (radioButton3.Checked) c1.datano++; //如果未选择过任何一个按钮 总数不自加 if (intok != 0 || intno != 0 || intpass != 0) c1.datatotal++; this.Hide(); Form1 frm1 = new Form1(); frm1.Show(); } } } 另一个窗体代码 Form4 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 WindowsFormsApp1 { public partial class Form4 : Form { public Form4() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //用户选择退出时 关闭此窗口 回到窗口一 this.Close(); Form1 frm1 = new Form1(); frm1.Show(); } private void Form4_Load(object sender, EventArgs e) { //页面加载显示 this.label5.Text = c1.datatotal.ToString(); this.label2.Text = c1.dataok.ToString(); this.label3.Text = c1.datapass.ToString(); this.label4.Text = c1.datano.ToString(); } private void label5_Click(object sender, EventArgs e) { } } } Form3中的类已经实例化,Form4引用后c1不能识别,是什么问题呢
C#并行任务出现卡死的问题
我想实现的结果很简单,就是用并行的方式去为2个控件赋值,但是结果是窗体会假死,看起来是死锁的样子,不懂为什么,谁能给讲解讲解一下。 代码: ``` private void button4_Click(object sender, EventArgs e) { Parallel.Invoke( SetLable1Text, SetLable2Text ); } void SetLable1Text() { label1.Invoke(new Action(() => { label1.Text = "正在执行..."; Thread.Sleep(TimeSpan.FromSeconds(3)); label1.Text = "执行完毕"; })); } void SetLable2Text() { label2.Invoke(new Action(() => { label2.Text = "正在执行..."; Thread.Sleep(TimeSpan.FromSeconds(2)); label2.Text = "执行完毕"; })); } ```
c#异步通讯五子棋 双方倒计时怎么写
我用c#异步通讯做了个五子棋的winform,服务器端和客户端分开的。想利用timer实现双方倒计时要怎么写? client端代码 ``` using System; using System.Drawing; using System.Windows.Forms; using System.IO; namespace GameClient { public partial class FormPlaying : Form { private int tableIndex; private int side; private DotColor[,] grid = new DotColor[15, 15]; //保存颜色,用于消点时进行判断 private Bitmap blackBitmap; private Bitmap whiteBitmap; //命令是否来自服务器 private bool isReceiveCommand = false; private Service service; delegate void LabelDelegate(Label label, string str); delegate void ButtonDelegate(Button button, bool flag); delegate void RadioButtonDelegate(RadioButton radioButton, bool flag); delegate void SetDotDelegate(int i, int j, int dotColor); LabelDelegate labelDelegate; ButtonDelegate buttonDelegate; RadioButtonDelegate radioButtonDelegate; public FormPlaying(int TableIndex, int Side, BinaryWriter bw) { InitializeComponent(); this.tableIndex = TableIndex; this.side = Side; labelDelegate = new LabelDelegate(SetLabel); buttonDelegate = new ButtonDelegate(SetButton); radioButtonDelegate = new RadioButtonDelegate(SetRadioButton); blackBitmap = new Bitmap(Properties.Resources.black); whiteBitmap = new Bitmap(Properties.Resources.white); service = new Service(listBox1, bw); } /// <summary>载入窗体时发生的事件</summary> private void FormPlaying_Load(object sender, EventArgs e) { //默认游戏级别为3级 radioButton3.Checked = true; for (int i = 0; i <= grid.GetUpperBound(0); i++) { for (int j = 0; j <= grid.GetUpperBound(1); j++) { grid[i, j] = DotColor.None; } } labelSide0.Text = ""; labelSide1.Text = ""; labelGrade0.Text = ""; labelGrade1.Text = ""; } /// <summary>设置标签显示信息</summary> /// <param name="Label">要设置的Label</param> /// <param name="string">要设置的信息</param> public void SetLabel(Label label, string str) { if (label.InvokeRequired) { this.Invoke(labelDelegate, label, str); } else { label.Text = str; } } /// <summary>设置button是否可用</summary> /// <param name="Button">要设置的Button</param> /// <param name="flag">是否可用</param> private void SetButton(Button button, bool flag) { if (button.InvokeRequired) { this.Invoke(buttonDelegate, button, flag); } else { button.Enabled = flag; } } /// <summary>设置radioButton选择状态</summary> /// <param name="radioButton">要设置的RadioButton</param> /// <param name="flag">是否选中</param> private void SetRadioButton(RadioButton radioButton, bool flag) { if (radioButton.InvokeRequired) { this.Invoke(radioButtonDelegate, radioButton, flag); } else { radioButton.Checked = flag; } } /// <summary>设置棋子状态</summary> /// <param name="i">第几行</param> /// <param name="j">第几列</param> /// <param name="dotColor">棋子颜色</param> //public void SetDot(int i, int j, DotColor dotColor) //{ // service.AddItemToListBox(string.Format("{0},{1},{2}", i, j, dotColor)); // grid[i, j] = dotColor; // pictureBox1.Invalidate(); //} /// <summary>重新开始新游戏</summary> /// <param name="str">警告信息</param> public void Restart(string str) { MessageBox.Show(str, "", MessageBoxButtons.OK, MessageBoxIcon.Warning); ResetGrid(); SetButton(buttonStart, true); } /// <summary>重置棋盘</summary> private void ResetGrid() { SetLabel(labelGrade0, ""); SetLabel(labelGrade1, ""); for (int i = 0; i <= grid.GetUpperBound(0); i++) { for (int j = 0; j <= grid.GetUpperBound(1); j++) { grid[i, j] = DotColor.None; } } pictureBox1.Invalidate(); } /// <summary>取消棋子</summary> /// <param name="x">x坐标</param> /// <param name="y">y坐标</param> public void UnsetDot(int x, int y,DotColor dotColor) { //service.AddItemToListBox(string.Format("{0},{1},{2}", i, j, dotColor)); //grid[x / 20 - 1, y / 20 - 1] = dotColor; grid[x,y] = dotColor; pictureBox1.Invalidate(); } /// <summary>绘制图像</summary> private void pictureBox1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; for (int i = 0; i <= grid.GetUpperBound(0); i++) { for (int j = 0; j <= grid.GetUpperBound(1); j++) { if (grid[i, j] != DotColor.None) { if (grid[i, j] == DotColor.Black) { g.DrawImage(blackBitmap, (i + 1) * 20, (j + 1) * 20); } else { g.DrawImage(whiteBitmap, (i + 1) * 20, (j + 1) * 20); } } } } } /// <summary>设置游戏难度级别</summary> /// <param name="ss">难度级别</param> public void SetLevel(string ss) { isReceiveCommand = true; switch (ss) { case "1": SetRadioButton(radioButton1, true); break; case "2": SetRadioButton(radioButton2, true); break; case "3": SetRadioButton(radioButton3, true); break; case "4": SetRadioButton(radioButton4, true); break; case "5": SetRadioButton(radioButton5, true); break; } isReceiveCommand = false; } /// <summary>当游戏难度级别发生变化时触发的事件</summary> private void radioButton_CheckedChanged(object sender, EventArgs e) { //isReceiveCommand为true表明是接收服务器设置的难度级别触发的此事件 //就不需要再向服务器发送 if (isReceiveCommand == false) { RadioButton radiobutton = (RadioButton)sender; if (radiobutton.Checked == true) { //设置难度级别 //格式:Time,桌号,难度级别 service.SendToServer(string.Format("Level,{0},{1}",tableIndex, radiobutton.Name[radiobutton.Name.Length - 1])); } } } /// <summary>向服务器发送消息</summary> private void buttonSend_Click(object sender, EventArgs e) { //字符串格式:Talk,桌号,对话内容 service.SendToServer(string.Format("Talk,{0},{1}", tableIndex, textBox1.Text)); } /// <summary>对话内容改变时触发的事件</summary> private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)Keys.Enter) { //字符串格式:Talk,桌号,对话内容 service.SendToServer(string.Format("Talk,{0},{1}", tableIndex, textBox1.Text)); } } /// <summary>点击帮助按钮时触发的事件</summary> private void buttonHelp_Click(object sender, EventArgs e) { string str = "\n本游戏每两人为一组。游戏玩法:\n\n" + "(1)对局双方各执一色棋子。\n\n"+ "(2)空棋盘开局。\n\n" + "(3)黑先、白后,交替下子,每次只能下一子。\n\n" + "(4)只要黑白方中任意一方的棋子有五子连在一起(即五子连珠),可以为横连、纵连、斜连,则该方获胜。\n"; MessageBox.Show(str, "帮助信息"); } /// <summary>点击开始按钮时触发的事件</summary> private void buttonStart_Click(object sender, EventArgs e) { service.SendToServer(string.Format("Start,{0},{1}", tableIndex, side)); this.buttonStart.Enabled = false; } /// <summary>点击退出按钮时触发的事件</summary> private void buttonExit_Click(object sender, EventArgs e) { this.Close(); } /// <summary>关闭窗体时触发的事件</summary> private void FormPlaying_FormClosing(object sender, FormClosingEventArgs e) { //格式:GetUp,桌号,座位号 service.SendToServer(string.Format("GetUp,{0},{1}", tableIndex, side)); } /// <summary>FormRoom中的线程调用此方法关闭此窗体</summary> public void StopFormPlaying() { Application.Exit(); } /// <summary>在pictureBox1中按下鼠标触发的事件</summary> private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { int x = e.X / 20; int y = e.Y / 20; int color=-1; if (!(x < 1 || x > 15 || y < 1 || y > 15)) { if (grid[x - 1, y - 1] == DotColor.None) { // int color = (int)grid[x - 1, y - 1]; if (side == 0) { color = 0; } if (side == 1) { color = 1; } //发送格式:UnsetDot,桌号,座位号,行,列,颜色 service.SendToServer(string.Format( "UnsetDot,{0},{1},{2},{3},{4}", tableIndex, side, x - 1, y - 1, color)); } } } /// <summary> /// 设置玩家信息,格式:座位号,labelSide显示的信息,listbox显示的信息 /// </summary> /// <param name="sideString">指定玩家</param> /// <param name="labelSideString">labelSide显示的信息</param> /// <param name="listBoxString">listbox显示的信息</param> public void SetTableSideText(string sideString, string labelSideString, string listBoxString) { string s = "白方"; if (sideString == "0") { s = "黑方:"; } //判断自己是黑方还是白方 if (sideString == side.ToString()) { SetLabel(labelSide1, s + labelSideString); } else { SetLabel(labelSide0, s + labelSideString); } service.AddItemToListBox(listBoxString); } /// <summary> /// 设置成绩信息,格式:grade0为黑方成绩,grade1为白方成绩 /// </summary> /// <param name="str0">黑方成绩信息</param> /// <param name="str1">白方成绩信息</param> public void SetGradeText(string str0, string str1) { if (side == (int)DotColor.Black) { SetLabel(labelGrade1, str0); SetLabel(labelGrade0, str1); } else { SetLabel(labelGrade0, str0); SetLabel(labelGrade1, str1); } } /// <summary>显示谈话信息</summary> /// <param name="talkMan">谈话者</param> /// <param name="str">要显示的信息</param> public void ShowTalk(string talkMan, string str) { service.AddItemToListBox(string.Format("{0}说:{1}", talkMan, str)); } /// <summary> /// 显示消息 /// </summary> /// <param name="str">要显示的消息</param> public void ShowMessage(string str) { service.AddItemToListBox(str); } } } ``` service方法代码 ``` //------Service.cs----------// using System.Windows.Forms; using System.IO; using System.Net; using System.Net.Sockets; using System; using System.Threading; namespace GameClient { class Service { ListBox listbox; //StreamWriter sw; BinaryWriter bw; bool isExit = false; public Service(ListBox listbox, BinaryWriter bw) { this.listbox = listbox; this.bw = bw; } private struct SendToServerStates { public SendToServerDelegate d; public IAsyncResult result; } /// <summary>异步向服务器端发送数据</summary> public void AsyncSendToServer(string message) { SendToServerDelegate d = new SendToServerDelegate(SendToServer); IAsyncResult result = d.BeginInvoke(message, null, null); while (result.IsCompleted == false) { if (isExit) { return; } Thread.Sleep(50); } SendToServerStates states = new SendToServerStates(); states.d = d; states.result = result; Thread t = new Thread(FinishAsyncSendToServer); t.IsBackground = true; t.Start(states); } /// <summary>处理接收的服务器端数据</summary> private void FinishAsyncSendToServer(object obj) { SendToServerStates states = (SendToServerStates)obj; states.d.EndInvoke(states.result); } delegate void SendToServerDelegate(string message); /// <summary>向服务器发送数据</summary> public void SendToServer(string str) { try { bw.Write(str); bw.Flush(); } catch { AddItemToListBox("发送数据失败"); } } delegate void ListBoxDelegate(string str); /// <summary>在listbox中追加信息<</summary> /// <param name="str">要追加的信息</param> public void AddItemToListBox(string str) { if (listbox.InvokeRequired) { ListBoxDelegate d = AddItemToListBox; listbox.Invoke(d, str); } else { listbox.Items.Add(str); listbox.SelectedIndex = listbox.Items.Count - 1; listbox.ClearSelected(); } } } } ```
c#,winform,启动时Application.Run(new Form1())报错
winform的图如下 ![图片说明](https://img-ask.csdn.net/upload/201608/08/1470647752_483698.png) 报错信息如下,抛出了Win32Exception ![图片说明](https://img-ask.csdn.net/upload/201608/08/1470647668_909727.png) ![图片说明](https://img-ask.csdn.net/upload/201608/08/1470647676_921666.png) 窗体代码如下 ``` public partial class Form1 : Form { [DllImport("C:\\Users\\Dell-pc\\Desktop\\ConsoleApplication1\\Debug\\ConsoleApplication1.dll")] protected static extern bool BeginHook(); [DllImport("C:\\Users\\Dell-pc\\Desktop\\ConsoleApplication1\\Debug\\ConsoleApplication1.dll")] protected static extern bool FinishHook(); string str=""; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { BeginHook(); } private void button2_Click(object sender, EventArgs e) { FinishHook(); } protected override void WndProc(ref System.Windows.Forms.Message msg) { str = str + msg.WParam + "\n"; label1.Text = str; } } ``` 这里导入了自己写的dll dll的cpp文件代码 ``` #include "stdafx.h" #include "ConsoleApplication1.h" #include <windows.h> HMODULE hThisDllModule; #pragma data_seg("test") HHOOK hHook=NULL; HWND hMainWindow=NULL; #pragma data_seg() LRESULT CALLBACK HandleHookMessage(int nCode, WPARAM wParam, LPARAM lParam) { PostMessage(hMainWindow, nCode, wParam, lParam); return ::CallNextHookEx(hHook, nCode, wParam, lParam); } CONSOLEAPPLICATION1_API BOOL WINAPI BeginHook() { hHook=::SetWindowsHookEx(WH_KEYBOARD, HandleHookMessage, hThisDllModule, 0); return true; } CONSOLEAPPLICATION1_API BOOL WINAPI FinishHook() { return ::UnhookWindowsHookEx(hHook); } ``` dll的h文件 ``` #ifdef CONSOLEAPPLICATION1_EXPORTS #define CONSOLEAPPLICATION1_API __declspec(dllexport) #else #define CONSOLEAPPLICATION1_API __declspec(dllimport) #endif CONSOLEAPPLICATION1_API BOOL WINAPI BeginHook(); CONSOLEAPPLICATION1_API BOOL WINAPI FinishHook(); ``` 用了def文件 ``` LIBRARY EXPORTS BeginHook FinishHook SECTIONS test Read Write Shared ``` 代码如上,这个应该是窗体代码中有哪里出错了所以启动不了窗体,但是我看不出哪里出错了,求大神指点指点
串口和串口轉usb的區別
圖一: ![知道串口轉usb](https://img-ask.csdn.net/upload/201811/22/1542851006_844269.png) 圖二: ![這是串口的](https://img-ask.csdn.net/upload/201811/22/1542851037_642924.png) # **提問:圖一圖二可不可以都用下面的代碼獲取數據:(圖二可以用下面的代碼獲取數據,但是圖一不知道行不行,請各位大佬路過看看)** ``` package com.lyf.test2; import java.awt.Button; import java.awt.Color; import java.awt.Font; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.Label; import java.awt.Toolkit; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JOptionPane; import com.lyf.test2.SerialTool; import gnu.io.SerialPort; import gnu.io.SerialPortEvent; import gnu.io.SerialPortEventListener; import serialException.ExceptionWriter; import serialException.NoSuchPort; import serialException.NotASerialPort; import serialException.PortInUse; import serialException.ReadDataFromSerialPortFailure; import serialException.SendDataToSerialPortFailure; import serialException.SerialPortInputStreamCloseFailure; import serialException.SerialPortOutputStreamCloseFailure; import serialException.SerialPortParameterFailure; import serialException.TooManyListeners; /** * 主程序 * @author zhong * */ public class Client extends Frame{ private static final long serialVersionUID = 1L; /** * 程序界面宽度 */ public static final int WIDTH = 800; /** * 程序界面高度 */ public static final int HEIGHT = 620; /** * 程序界面出现位置(横坐标) */ public static final int LOC_X = 200; /** * 程序界面出现位置(纵坐标) */ public static final int LOC_Y = 70; private static SerialPort serialPort = null; //保存串口对象 private Font font = new Font("微软雅黑", Font.BOLD, 25);//文本框字體 private Label weight = new Label("暫無數據", Label.CENTER); //重量 private Button saveButton = new Button("保存");//设置button按钮 Image offScreen = null; //用于双缓冲 //设置window的icon(这里我自定义了一下Windows窗口的icon图标,因为实在觉得哪个小咖啡图标不好看 = =) Toolkit toolKit = getToolkit();//返回此窗体的工具包 Image icon = toolKit.getImage(Client.class.getResource("computer.png"));//獲取當前類所在的包下面的圖片 /** * 主方法 * @param args * @throws SerialPortOutputStreamCloseFailure * @throws SendDataToSerialPortFailure * @throws PortInUse * @throws NoSuchPort * @throws NotASerialPort * @throws SerialPortParameterFailure */ public static void main(String[] args) throws SendDataToSerialPortFailure, SerialPortOutputStreamCloseFailure, SerialPortParameterFailure, NotASerialPort, NoSuchPort, PortInUse { new Client().launchFrame(); } /** * 主菜单窗口显示; * 添加Label、按钮、下拉条及相关事件监听; */ public void launchFrame() { this.setBounds(LOC_X, LOC_Y, WIDTH, HEIGHT); this.setTitle("CDIO工程项目"); this.setIconImage(icon); this.setBackground(Color.white); this.setLayout(null); //改變按鈕的事件监听 this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent arg0) { if (serialPort != null) { //程序退出时关闭串口释放资源 SerialTool.closePort(serialPort); } System.exit(0); } }); //设置文本框位置、背景颜色、是否粗体、字体颜色 weight.setBounds(140, 103, 225, 50); weight.setBackground(Color.black); weight.setFont(font); weight.setForeground(Color.white); add(weight); //添加保存按钮 saveButton.setBounds(250, 490, 300, 50); saveButton.setBackground(Color.lightGray); saveButton.setFont(new Font("微软雅黑", Font.BOLD, 20)); saveButton.setForeground(Color.darkGray); add(saveButton); //添加打开串口按钮的事件监听 try { //指定端口名及波特率的串口对象 serialPort = SerialTool.openPort("COM1", 4800); //在该串口对象上添加监听器 SerialTool.addListener(serialPort, new SerialListener()); } catch (SerialPortParameterFailure | NotASerialPort | NoSuchPort | PortInUse | TooManyListeners e1) { //发生错误时使用一个Dialog提示具体的错误信息 JOptionPane.showMessageDialog(null, e1, "错误", JOptionPane.INFORMATION_MESSAGE); } this.setResizable(false);//设置此框架是否可由用户调整大小。 this.setVisible(true); //显示窗口 new Thread(new RepaintThread()).start(); //启动重画线程 } /** * 画出主界面组件元素 * 设置button的字体颜色、设置字体样式 是否粗体 字体大小、文本、位置 */ public void paint(Graphics g) { g.setColor(Color.black); g.setFont(new Font("微软雅黑", Font.BOLD, 25)); g.drawString(" 重量: ", 45, 130); } /** * 双缓冲方式重画界面各元素组件 */ public void update(Graphics g) { if (offScreen == null) offScreen = this.createImage(WIDTH, HEIGHT); Graphics gOffScreen = offScreen.getGraphics(); Color c = gOffScreen.getColor(); gOffScreen.setColor(Color.white); gOffScreen.fillRect(0, 0, WIDTH, HEIGHT); //重画背景画布 this.paint(gOffScreen); //重画界面元素 gOffScreen.setColor(c); g.drawImage(offScreen, 0, 0, null); //将新画好的画布“贴”在原画布上 } /** * 以内部类形式创建一个串口监听类 * @author zhong * */ private class SerialListener implements SerialPortEventListener { /** * 处理监控到的串口事件 */ public void serialEvent(SerialPortEvent serialPortEvent) { try { // 等待1秒钟让串口把数据全部接收后在处理 Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } switch (serialPortEvent.getEventType()) { case SerialPortEvent.BI: // 10 通讯中断 JOptionPane.showMessageDialog(null, "与串口设备通讯中断", "错误", JOptionPane.INFORMATION_MESSAGE); break; case SerialPortEvent.OE: // 7 溢位(溢出)错误 case SerialPortEvent.FE: // 9 帧错误 case SerialPortEvent.PE: // 8 奇偶校验错误 case SerialPortEvent.CD: // 6 载波检测 case SerialPortEvent.CTS: // 3 清除待发送数据 case SerialPortEvent.DSR: // 4 待发送数据准备好了 case SerialPortEvent.RI: // 5 振铃指示 case SerialPortEvent.OUTPUT_BUFFER_EMPTY: // 2 输出缓冲区已清空 break; case SerialPortEvent.DATA_AVAILABLE: // 1 串口存在可用数据 byte[] data = null; try { if (serialPort == null) {//判断串口对象是否为空 JOptionPane.showMessageDialog(null, "串口对象为空!监听失败!", "错误", JOptionPane.INFORMATION_MESSAGE); }else { data = SerialTool.readFromPort(serialPort); //读取数据,存入字节数组 //System.out.println(new String(data)); //自定义解析过程 if (data != null && data.length > 1) { //检查数据是否读取正确 try { weight.setText(new String(data) + " g"); } catch (ArrayIndexOutOfBoundsException e) { JOptionPane.showMessageDialog(null, "数据解析过程出错,更新界面数据失败!请检查设备或程序!", "错误", JOptionPane.INFORMATION_MESSAGE); System.exit(0); } }else { JOptionPane.showMessageDialog(null, "读取数据过程中未获取到有效数据!请检查设备或程序!", "错误", JOptionPane.INFORMATION_MESSAGE); System.exit(0); } } } catch (ReadDataFromSerialPortFailure | SerialPortInputStreamCloseFailure e) { JOptionPane.showMessageDialog(null, e, "错误", JOptionPane.INFORMATION_MESSAGE); System.exit(0); //发生读取错误时显示错误信息后退出系统 } break; } } } /** * 重画线程(每隔30毫秒重画一次) */ private class RepaintThread implements Runnable { public void run() { while(true) { //调用重画方法 repaint(); try { Thread.sleep(30); } catch (InterruptedException e) { String err = ExceptionWriter.getErrorInfoFromException(e); JOptionPane.showMessageDialog(null, err, "错误", JOptionPane.INFORMATION_MESSAGE); System.exit(0); } } } } } ``` ``` package com.lyf.test2; import java.io.IOException; import java.io.InputStream; import java.util.TooManyListenersException; import gnu.io.CommPort; import gnu.io.CommPortIdentifier; import gnu.io.NoSuchPortException; import gnu.io.PortInUseException; import gnu.io.SerialPort; import gnu.io.SerialPortEventListener; import gnu.io.UnsupportedCommOperationException; import serialException.*; /** * 串口服务类,提供打开、关闭串口,读取、发送串口数据等服务(采用单例设计模式) * @author zhong * */ public class SerialTool { private static SerialTool serialTool = null; static { //在该类被ClassLoader加载时就初始化一个SerialTool对象 if (serialTool == null) { serialTool = new SerialTool(); } } //私有化SerialTool类的构造方法,不允许其他类生成SerialTool对象 private SerialTool() {} /** * 获取提供服务的SerialTool对象 * @return serialTool */ public static SerialTool getSerialTool() { if (serialTool == null) { serialTool = new SerialTool(); } return serialTool; } /** * 打开串口 * @param portName 端口名称 * @param baudrate 波特率 * @return 串口对象 * @throws SerialPortParameterFailure 设置串口参数失败 * @throws NotASerialPort 端口指向设备不是串口类型 * @throws NoSuchPort 没有该端口对应的串口设备 * @throws PortInUse 端口已被占用 */ public static final SerialPort openPort(String portName, int baudrate) throws SerialPortParameterFailure, NotASerialPort, NoSuchPort, PortInUse { try { //通过端口名识别端口 CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName); //打开端口,并给端口名字和一个timeout(打开操作的超时时间) CommPort commPort = portIdentifier.open(portName, 2000); //判断是不是串口 if (commPort instanceof SerialPort) { SerialPort serialPort = (SerialPort) commPort; try { //设置一下串口的波特率等参数 serialPort.setSerialPortParams(baudrate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch (UnsupportedCommOperationException e) { throw new SerialPortParameterFailure(); } //System.out.println("Open " + portName + " sucessfully !"); return serialPort; } else { //不是串口 throw new NotASerialPort(); } } catch (NoSuchPortException e1) { throw new NoSuchPort(); } catch (PortInUseException e2) { throw new PortInUse(); } } /** * 关闭串口 * @param serialport 待关闭的串口对象 */ public static void closePort(SerialPort serialPort) { if (serialPort != null) { serialPort.close(); serialPort = null; } } /** * 从串口读取数据 * @param serialPort 当前已建立连接的SerialPort对象 * @return 读取到的数据 * @throws ReadDataFromSerialPortFailure 从串口读取数据时出错 * @throws SerialPortInputStreamCloseFailure 关闭串口对象输入流出错 */ public static byte[] readFromPort(SerialPort serialPort) throws ReadDataFromSerialPortFailure, SerialPortInputStreamCloseFailure { InputStream in = null; byte[] bytes = null; try { in = serialPort.getInputStream();//取入数据 int bufflenth = in.available(); //获取buffer里的数据长度 while (bufflenth != 0) { bytes = new byte[bufflenth]; //初始化byte数组为buffer中数据的长度 in.read(bytes); bufflenth = in.available(); } } catch (IOException e) { throw new ReadDataFromSerialPortFailure(); } finally { try { if (in != null) { in.close(); in = null; } } catch(IOException e) { throw new SerialPortInputStreamCloseFailure(); } } return bytes; } /** * 添加监听器 * @param port 串口对象 * @param listener 串口监听器 * @throws TooManyListeners 监听类对象过多 */ public static void addListener(SerialPort port, SerialPortEventListener listener) throws TooManyListeners { try { //给串口添加监听器 port.addEventListener(listener); //设置当有数据到达时唤醒监听接收线程 port.notifyOnDataAvailable(true); //设置当通信中断时唤醒中断线程 port.notifyOnBreakInterrupt(true); } catch (TooManyListenersException e) { throw new TooManyListeners(); } } } ```
相见恨晚的超实用网站
搞学习 知乎:www.zhihu.com 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:study.163.com 哔哩哔哩弹幕网:www.bilibili.com 我要自学网:www.51zxw
花了20分钟,给女朋友们写了一个web版群聊程序
参考博客 [1]https://www.byteslounge.com/tutorials/java-ee-html5-websocket-example
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
这30个CSS选择器,你必须熟记(上)
关注前端达人,与你共同进步CSS的魅力就是让我们前端工程师像设计师一样进行网页的设计,我们能轻而易举的改变颜色、布局、制作出漂亮的影音效果等等,我们只需要改几行代码,不需...
国产开源API网关项目进入Apache孵化器:APISIX
点击蓝色“程序猿DD”关注我回复“资源”获取独家整理的学习资料!近日,又有一个开源项目加入了这个Java开源界大名鼎鼎的Apache基金会,开始进行孵化器。项目名称:AP...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
编写Spring MVC控制器的14个技巧
本期目录 1.使用@Controller构造型 2.实现控制器接口 3.扩展AbstractController类 4.为处理程序方法指定URL映射 5.为处理程序方法指定HTTP请求方法 6.将请求参数映射到处理程序方法 7.返回模型和视图 8.将对象放入模型 9.处理程序方法中的重定向 10.处理表格提交和表格验证 11.处理文件上传 12.在控制器中自动装配业务类 ...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
求小姐姐抠图竟遭白眼?痛定思痛,我决定用 Python 自力更生!
点击蓝色“Python空间”关注我丫加个“星标”,每天一起快乐的学习大家好,我是 Rocky0429,一个刚恰完午饭,正在用刷网页浪费生命的蒟蒻...一堆堆无聊八卦信息的网页内容慢慢使我的双眼模糊,一个哈欠打出了三斤老泪,就在此时我看到了一张图片:是谁!是谁把我女朋友的照片放出来的!awsl!太好看了叭...等等,那个背景上的一堆鬼画符是什么鬼?!真是看不下去!叔叔婶婶能忍,隔壁老王的三姨妈的四表...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
【管理系统课程设计】美少女手把手教你后台管理
【文章后台管理系统】URL设计与建模分析+项目源码+运行界面 栏目管理、文章列表、用户管理、角色管理、权限管理模块(文章最后附有源码) 1. 这是一个什么系统? 1.1 学习后台管理系统的原因 随着时代的变迁,现如今各大云服务平台横空出世,市面上有许多如学生信息系统、图书阅读系统、停车场管理系统等的管理系统,而本人家里就有人在用烟草销售系统,直接在网上完成挑选、购买与提交收货点,方便又快捷。 试想,若没有烟草销售系统,本人家人想要购买烟草,还要独自前往药...
相关热词 c# clr dll c# 如何orm c# 固定大小的字符数组 c#框架设计 c# 删除数据库 c# 中文文字 图片转 c# 成员属性 接口 c#如何将程序封装 16进制负数转换 c# c#练手项目
立即提问