e.Graphics.DrawString 怎么调整字方向呢?

ggt87125 2011-11-07 10:02:15
e.Graphics.DrawString 怎么调整字方向呢?


...全文
1275 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Roger_Zh 2013-05-20
  • 打赏
  • 举报
回复
我参考这个帖子的内容,弄了下我的选项卡标题(标题在右边,默认文字是转了方向的,看着累)文字,弄成这样的: 选 项 1 选 项 2 这样看着舒服多了。 方法分享一下: 首先:选项卡控件的DrawMode改为OwnerDrawFixed,然后才能触发下面的事件。 private void tabControls1_DrawItem(object sender, DrawItemEventArgs e) { Graphics g = e.Graphics; Font font; Brush bs ; Rectangle rct = e.Bounds; if ((e.State == DrawItemState.Selected)) { bs= new SolidBrush(e.BackColor); rct.X += 3; } else { bs= new SolidBrush(e.ForeColor); rct.X -=1; } StringFormat StrF = new StringFormat(); StrF.FormatFlags = StringFormatFlags.DirectionVertical; // 竖排 g.DrawString(tabOrders.TabPages[e.Index].Text,e.Font,bs,new Point(rct.X,rct.Y),StrF); } 完成。
ggt87125 2011-11-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bdmh 的回复:]
还有,Graphics有很多带Transform的方法有一个旋转的,这样可以旋转坐标,画出各种角度
[/Quote]

Transform 你好 能说下这个怎么用吗?
ggt87125 2011-11-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hudenq 的回复:]
C# code

// 竖排
StringFormat StrF = new StringFormat();
StrF.FormatFlags = StringFormatFlags.DirectionVertical;
e.Graphics.DrawString("asdfghjkl", new Font(……
[/Quote]

可能没说清楚 ,我想字 竖起来,就是右边当成上面 ,而不是字竖着显示 。
bdmh 2011-11-07
  • 打赏
  • 举报
回复
还有,Graphics有很多带Transform的方法有一个旋转的,这样可以旋转坐标,画出各种角度
porschev 2011-11-07
  • 打赏
  • 举报
回复

慢了。。。汗
porschev 2011-11-07
  • 打赏
  • 举报
回复


System.Drawing.StringFormatFlags.DirectionRightToLeft;

//红色自选

hudenq 2011-11-07
  • 打赏
  • 举报
回复

// 竖排
StringFormat StrF = new StringFormat();
StrF.FormatFlags = StringFormatFlags.DirectionVertical;
e.Graphics.DrawString("asdfghjkl", new Font("宋体", 10), mypen.Brush, new Point(10, 10), StrF);
没法下载,到这里折腾一把试试。 本文由abc2253130贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 C#(WINFORM)学习 一、 C#基础 基础 类型和变量 类型和变量 类型 C# 支持两种类型:“值类型”和“引用类型”。值类型包括简单类型(如 char、int 和 float 等)、枚举类型和结构类型。引用类型包括类 (Class)类 型、接口类型、委托类型和数组类型。 变量的类型声明 变量的类型声明 每个变量必须预先声明其类型。如 int a; int b = 100; float j = 4.5; string s1; 用 object 可以表示所有的类型。 预定义类型 下表列出了预定义类型,并说明如何使用。 类型 object 说明 所有其他类型的最终 基类型 符串类型; 符串是 Unicode 符序列 8 位有符号整型 16 位有符号整型 32 位有符号整型 64 位有符号整型 示例 object o = null; 范围 string sbyte short int long string s = "hello"; sbyte val = 12; short val = 12; int val = 12; long val1 = 12; -128 到 127 -32,768 到 32,767 -2,147,483,648 2,147,483,647 -9,223,372,036,854,775,808 到 第1页 C#(WINFORM)学习 long val2 = 34L; 到 9,223,372,036,854,775,807 byte ushort 8 位无符号整型 16 位无符号整型 byte val1 = 12; ushort val1 = 12; uint val1 = 12; uint 32 位无符号整型 uint val2 = 34U; ulong val1 = 12; ulong val2 = 34U; ulong 64 位无符号整型 ulong val3 = 56L; ulong val4 = 78UL; float 单精度浮点型 float val = 1.23F;7 位 double val1 = 1.23; double 双精度浮点型 double val2 = ±5.0 × 10?324 ±1.7 × 10 308 0 到 255 0 到 65,535 0 到 4,294,967,295 0 到 18,446,744,073,709,551,615 ±1.5 × 10?45 ±3.4 × 10 38 到 到 4.56D;15-16 布尔型;bool 值或为 真或为假 符类型;char 值是 一个 Unicode 符 精确的小数类型, 具有 28 个有效数 bool val1 = true; bool val2 = false; char val = 'h'; decimal val = bool char decimal DateTime ±1.0 × 10?28 ±7.9 × 10 28 到 1.23M;28-29 变量转换 简单转换: float f = 100.1234f; 可以用括号转换: short s = (short)f 也可以利用 Convert 方法来转换: string s1; s1=Convert.ToString(a); MessageBox.Show(s1); 常用 Convert 方法有: 第2页 C#(WINFORM)学习 C# Convert.ToBoolean Convert.ToByte Convert.ToChar Convert.ToDateTime Convert.ToDecimal Convert.ToDouble Convert.ToInt16 Convert.ToInt32 Convert.ToInt64 Convert.ToSByte Convert.ToSingle Convert.ToString Convert.ToUInt16 Convert.ToUInt32 Convert.ToUInt64 备注 Math 类 常用科学计算方法: C# Math.Abs Math.Sqrt Math.Ro
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 System.Collections; namespace 贪吃蛇 { public partial class Form1 : Form { public int speed = 350; //用于设置贪吃蛇的速度 public static bool ifStart = false; //用于游戏是否开始 public static bool pause = true; //用于游戏是否暂停,游戏暂停为true Snake snake = new Snake();//实例化Snake类 Food food = new Food(); public Form1() { InitializeComponent(); } //绘制游戏场景 public void ProtractTable(Graphics G) { //绘制单元格的纵向线 for (int i = 0; i <= panel1.Width / Snake.SnakeBone; i++) { G.DrawLine(new Pen(Color.LightGreen, 1), new Point(i * Snake.SnakeBone, 0), new Point(i * Snake.SnakeBone, panel1.Height)); } //绘制单元格的横向线 for (int i = 0; i <= panel1.Height / Snake.SnakeBone; i++) { G.DrawLine(new Pen(Color.LightGreen, 1), new Point(0, i * Snake.SnakeBone), new Point(panel1.Width, i * Snake.SnakeBone)); } } private void panel1_Paint(object sender, PaintEventArgs e) { Graphics G = panel1.CreateGraphics();//创建panel1控件的Graphics类 ProtractTable(G); //绘制游戏场景 if (!ifStart) //如果没有开始游戏 { Snake.timer = timer1; Snake.label = label1; //初始化场地及贪吃蛇信息; //Control c = (Control)panel1; Snake.GamePlaceSet(panel1, Snake.SnakeBone); } else { for (int i = 0; i < Snake.List.Count; i++)//绘制蛇体 { e.Graphics.FillRectangle(Snake.SolidSnake, ((Point)Snake.List[i]).X + 1, ((Point)Snake.List[i]).Y + 1, Snake.SnakeBone - 1, Snake.SnakeBone - 1); } //绘制食物 e.Graphics.FillRectangle(Food.SolidFood, Food.FoodPoint.X + 1, Food.FoodPoint.Y + 1, Snake.SnakeBone - 1, Snake.SnakeBone - 1); if (Snake.isGame)//如果游戏结束 { e.Graphics.DrawString("游戏结束!", new Font("宋体", 50, FontStyle.Bold), new SolidBrush(Color.Yellow), new PointF(100, 150)); } } } private void 初级ToolStripMenuItem_Click(object sender, EventArgs e) {//在游戏没有开始和游戏结束时才可以选择设置 if ((ifStart == false) || Snake.isGame) {初级ToolStripMenuItem.Checked = false;//设置初级项被选中 中级ToolStripMenuItem.Checked = false;//设置中级项被选中 高级ToolStripMenuItem.Checked = false;//设置高级项目被选中 ((ToolStripMenuItem)sender).Checked = true;//设置当前项选中 speed = 350; label.Focus();//获得焦点 } } private void 中级ToolStripMenuItem_Click(object sender, EventArgs e) { //在游戏没有开始和游戏结束时才可以选择设置 if ((ifStart == false) || Snake.isGame) { 初级ToolStripMenuItem.Checked = false;//设置初级项被选中 中级ToolStripMenuItem.Checked = false;//设置中级项被选中 高级ToolStripMenuItem.Checked = false;//设置高级项目被选中 ((ToolStripMenuItem)sender).Checked = true;//设置当前项选中 speed = 250;//中级 label.Focus();//获得焦点 } } private void 高级ToolStripMenuItem_Click(object sender, EventArgs e) {//在游戏没有开始和游戏结束时才可以选择设置 if ((ifStart == false) || (Snake.isGame)) { 初级ToolStripMenuItem.Checked = false;//设置初级项被选中 中级ToolStripMenuItem.Checked = false;//设置中级项被选中 高级ToolStripMenuItem.Checked = false;//设置高级项目被选中 ((ToolStripMenuItem)sender).Checked = true;//设置当前项选中 speed = 200;//高级 label.Focus();//获得焦点 } } private void 开始sapceToolStripMenuItem_Click(object sender, EventArgs e) { //控制游戏的开始、暂停、和退出 ifStart = false; Graphics G = panel1.CreateGraphics();//创建panel1控件的Graphics类 //刷新游戏场地 G.FillRectangle(Snake.SolidBack, 0, 0, panel1.Width, panel1.Height); ProtractTable(G);//绘制游戏场地 ifStart = true;//开始游戏 //初始化场地以及贪吃蛇信息 Snake.GamePlaceSet(panel1, Snake.SnakeBone); timer1.Interval = speed;//设置贪吃蛇的移动速度 timer1.Start();//启动计时器 pause = false;//游戏初始状态,暂停取消 label.Text = "0";//显示当前分数 Food.Buildfood(Snake.hasFood, Snake.co);//生成食物 label.Focus();//获得焦点,便于键盘操作 } private void 暂停ToolStripMenuItem_Click(object sender, EventArgs e) { Graphics G = panel1.CreateGraphics();//创建panel1控件的Graphics类 //如果游戏正在运行 if ((pause == false && ifStart == true) && (!Snake.isGame)) { G.DrawString("游戏暂停!", new Font("宋体", 50, FontStyle.Bold), new SolidBrush(Color.Yellow), new PointF(100, 150)); timer1.Stop();//停止当前计时器 pause = true;//当前游戏暂停 } //如果游戏正在运行 else if (pause == true && ifStart == true && (!Snake.isGame)) { G.FillRectangle(Snake.SolidBack, 0, 0, panel1.Width, panel1.Height); ProtractTable(G); timer1.Start();//启动计时器 pause = false;//开始游戏 } } private void 结束F4ToolStripMenuItem_Click(object sender, EventArgs e) { if ((ifStart == false) || (Snake.isGame))//如果游戏正在运行 { if (DialogResult.Yes == MessageBox.Show("是否退出游戏?", "提示", MessageBoxButtons.YesNo)) { timer1.Stop(); //停止计时器 Application.Exit(); //停止运行,退出游戏 } } else MessageBox.Show("游戏正在运行中,暂时不允许退出!", "提示"); } private void 游戏说明ToolStripMenuItem_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.Show(); } //控制游戏的开始、暂停、和退出 public void NoviceControl(int n) { Graphics G = panel1.CreateGraphics();//创建panel1控件的Graphics类 switch (n) { case 1://开始游戏 { ifStart = false; //刷新游戏场地 G.FillRectangle(Snake.SolidBack, 0, 0, panel1.Width, panel1.Height); ProtractTable(G);//绘制游戏场地 ifStart = true;//开始游戏 //初始化场地以及贪吃蛇信息 Snake.GamePlaceSet(panel1, Snake.SnakeBone); timer1.Interval = speed;//设置贪吃蛇的移动速度 timer1.Start();//启动计时器 pause = false;//暂停游戏 Food.Buildfood(Snake.hasFood, Snake.co);//生成食物 label.Text = "0";//显示当前分数 break; } case 2://暂停游戏 {//如果游戏正在运行 if ((pause == false && ifStart == true) && (!Snake.isGame)) { G.DrawString("游戏暂停!", new Font("宋体", 50, FontStyle.Bold), new SolidBrush(Color.Yellow), new PointF(100, 150)); timer1.Stop();//停止当前计时器 pause = true;//当前游戏暂停 } //如果游戏正在运行 else if (pause == true && ifStart == true && (!Snake.isGame)) { G.FillRectangle(Snake.SolidBack, 0, 0, panel1.Width, panel1.Height); ProtractTable(G); timer1.Start();//启动计时器 pause = false;//开始游戏 } break; } case 3://退出游戏 { if ((ifStart == false) || (Snake.isGame))//如果游戏正在运行 { timer1.Stop(); //停止计时器 Application.Exit(); //停止运行,退出游戏 } break; } // case 4://打开帮助信息 // ' { if ((ifStart == false) || (Snake.isGame))//如果游戏正在运行 { // help temp = new help();//初始 一个 help实例 // if (temp.ShowDialog(this) == DialogResult.OK) // temp.Dispose(); // } // break; // } // } } } } private void Form1_KeyDown(object sender, KeyEventArgs e) { int tem_p = -1;//记录控件键值 if (e.KeyCode == Keys.F2)//如果按F2 tem_p = 1;//开始游戏 if (e.KeyCode == Keys.Space)//如果按F3 tem_p = 2;//暂停游戏或者继续游戏 if (e.KeyCode == Keys.F4)//如果按F4 tem_p = 3;//关闭游戏 if (e.KeyCode==Keys.F3) tem_p = 4;//打开帮助信息 if (tem_p != -1)//如果当前是操作标识 NoviceControl(tem_p);     //控制游戏的暂停和关闭 if (ifStart == true && pause == false)//如果游戏启动,键盘方向键才起作用 { int tem_n = -1;//记录移动键值 if (e.KeyCode == Keys.Right || e.KeyCode == Keys.D)//按下右键向右移动 tem_n = 0; if (e.KeyCode == Keys.Left || e.KeyCode == Keys.A)//按下左键向左移动 tem_n = 1; if (e.KeyCode == Keys.Up || e.KeyCode == Keys.W)//按下上键向上移动 tem_n = 2; if (e.KeyCode == Keys.Down || e.KeyCode == Keys.S)//按下键向下移动 tem_n = 3; if (tem_n != -1 && tem_n != Snake.Direct) { if (Snake.isGame == false) {//如果移动的方向不是相反方向 if (!((tem_n == 0 && Snake.Direct == 1 || tem_n == 1 && Snake.Direct == 0) || (tem_n == 2 && Snake.Direct == 3 || tem_n == 3 && Snake.Direct == 2))) { Snake.Direct = tem_n;//记录移动的方向 snake.SnakeMove(tem_n, this);//移动贪吃蛇 } } } } } private void 绿色ToolStripMenuItem_Click(object sender, EventArgs e) { if ((ifStart == false) || (Snake.isGame)) { 绿色ToolStripMenuItem.Checked = false; 红色ToolStripMenuItem.Checked = false; 蓝色ToolStripMenuItem.Checked = false; 黑色ToolStripMenuItem.Checked = false; ((ToolStripMenuItem)sender).Checked = true;//设置当前项选中 Snake.SolidSnake = new SolidBrush(Color.Green); } } private void 红色ToolStripMenuItem_Click(object sender, EventArgs e) { if ((ifStart == false) || (Snake.isGame)) { 绿色ToolStripMenuItem.Checked = false; 红色ToolStripMenuItem.Checked = false; 蓝色ToolStripMenuItem.Checked = false; 黑色ToolStripMenuItem.Checked = false; ((ToolStripMenuItem)sender).Checked = true;//设置当前项选中 Snake.SolidSnake = new SolidBrush(Color.Red); } } private void 蓝色ToolStripMenuItem_Click(object sender, EventArgs e) { if ((ifStart == false) || (Snake.isGame)) { 绿色ToolStripMenuItem.Checked = false; 红色ToolStripMenuItem.Checked = false; 蓝色ToolStripMenuItem.Checked = false; 黑色ToolStripMenuItem.Checked = false; ((ToolStripMenuItem)sender).Checked = true;//设置当前项选中 Snake.SolidSnake = new SolidBrush(Color.Blue); } } private void 黑色ToolStripMenuItem_Click(object sender, EventArgs e) { if ((ifStart == false) || (Snake.isGame)) { 绿色ToolStripMenuItem.Checked = false; 红色ToolStripMenuItem.Checked = false; 蓝色ToolStripMenuItem.Checked = false; 黑色ToolStripMenuItem.Checked = false; ((ToolStripMenuItem)sender).Checked = true;//设置当前项选中 Snake.SolidSnake = new SolidBrush(Color.Black); } } private void 原始大小ToolStripMenuItem_Click(object sender, EventArgs e) { if ((ifStart == false) || (Snake.isGame)) { 原始大小ToolStripMenuItem.Checked = false; 放大两倍ToolStripMenuItem.Checked = false; 放大三倍ToolStripMenuItem.Checked = false; ((ToolStripMenuItem)sender).Checked = true;//设置当前项选中 Snake.SnakeBone = 10; } } private void 放大两倍ToolStripMenuItem_Click(object sender, EventArgs e) { if ((ifStart == false) || (Snake.isGame)) { 原始大小ToolStripMenuItem.Checked = false; 放大两倍ToolStripMenuItem.Checked = false; 放大三倍ToolStripMenuItem.Checked = false; ((ToolStripMenuItem)sender).Checked = true;//设置当前项选中 Snake.SnakeBone = 20; } } private void 放大三倍ToolStripMenuItem_Click(object sender, EventArgs e) { if ((ifStart == false) || (Snake.isGame)) { 原始大小ToolStripMenuItem.Checked = false; 放大两倍ToolStripMenuItem.Checked = false; 放大三倍ToolStripMenuItem.Checked = false; ((ToolStripMenuItem)sender).Checked = true;//设置当前项选中 Snake.SnakeBone = 30; } } private void 橙色ToolStripMenuItem_Click(object sender, EventArgs e) { if ((ifStart == false) || (Snake.isGame)) {橙色ToolStripMenuItem.Checked = false; 黄色ToolStripMenuItem.Checked = false; 紫色ToolStripMenuItem.Checked = false; ((ToolStripMenuItem)sender).Checked = true;//设置当前项选中 Food.SolidFood = new SolidBrush(Color.Orange); } } private void 黄色ToolStripMenuItem_Click(object sender, EventArgs e) { if ((ifStart == false) || (Snake.isGame)) { 橙色ToolStripMenuItem.Checked = false; 黄色ToolStripMenuItem.Checked = false; 紫色ToolStripMenuItem.Checked = false; ((ToolStripMenuItem)sender).Checked = true;//设置当前项选中 Food.SolidFood = new SolidBrush(Color.Yellow); } } private void 紫色ToolStripMenuItem_Click(object sender, EventArgs e) { if ((ifStart == false) || (Snake.isGame)) { 橙色ToolStripMenuItem.Checked = false; 黄色ToolStripMenuItem.Checked = false; 紫色ToolStripMenuItem.Checked = false; ((ToolStripMenuItem)sender).Checked = true;//设置当前项选中 Food.SolidFood = new SolidBrush(Color.Purple); } } private void timer1_Tick(object sender, EventArgs e) { snake.SnakeMove(Snake.Direct, this);//移动贪吃蛇 } private void textBox1_TextChanged(object sender, EventArgs e) { } private void label_Click(object sender, EventArgs e) { } } }
import java.awt.*; import javax.swing.*; @SuppressWarnings("serial") public class MainClass extends JFrame { ControlSnake control; Toolkit kit; Dimension dimen; public static void main(String[] args) { new MainClass("my snake"); } public MainClass(String s) { super(s); control = new ControlSnake(); control.setFocusable(true); kit = Toolkit.getDefaultToolkit(); dimen = kit.getScreenSize(); add(control); setLayout(new BorderLayout()); setLocation(dimen.width / 3, dimen.height / 3);// dimen.width/3,dimen.height/3 setSize(FWIDTH, FHEIGHT); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setResizable(false); setVisible(true); } public static final int FWIDTH = 315; public static final int FHEIGHT = 380; } import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.Timer; import java.util.Random; @SuppressWarnings("serial") public class ControlSnake extends JPanel implements ActionListener { Random rand; ArrayList list, listBody; String str, str1; static boolean key; int x, y, dx, dy, fx, fy, flag; int snakeBody; int speed; public ControlSnake() { snakeBody = 1; str = "上下左右方向键控制 P键暂停..."; str1 = "现在的长度为:" + snakeBody; key = true; flag = 1; speed = 700; rand = new Random(); list = new ArrayList(); listBody = new ArrayList(); x = 5; y = 5; list.add(new Point(x, y)); listBody.add(list.get(0)); dx = 10; dy = 0; fx = rand.nextInt(30) * 10 + 5;// 2 fy = rand.nextInt(30) * 10 + 5;// 2 setBackground(Color.WHITE); setSize(new Dimension(318, 380)); final Timer time = new Timer(speed, this); time.start(); addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if (e.getKeyCode() == 37) { dx = -10; dy = 0; } else if (e.getKeyCode() == 38) { dx = 0; dy = -10; } else if (e.getKeyCode() == 39) { dx = 10; dy = 0; } else if (e.getKeyCode() == 40) { dx = 0; dy = 10; } else if (e.getKeyCode() == 80) { if (flag % 2 == 1) { time.stop(); } if (flag % 2 == 0) { time.start(); } flag++; } } }); } public void paint(Graphics g) { g.setColor(Color.WHITE); g.fillRect(0, 0, 400, 400); g.setColor(Color.DARK_GRAY); g.drawLine(3, 3, 305, 3); g.drawLine(3, 3, 3, 305); g.drawLine(305, 3, 305, 305); g.drawLine(3, 305, 305, 305); g.setColor(Color.PINK); for (int i = 0; i < listBody.size(); i++) { g.fillRect(listBody.get(i).x, listBody.get(i).y, 9, 9); } g.fillRect(x, y, 9, 9); g.setColor(Color.ORANGE); g.fillRect(fx, fy, 9, 9); g.setColor(Color.DARK_GRAY); str1 = "现在的长度为:" + snakeBody; g.drawString(str, 10, 320); g.drawString(str1, 10, 335); } public void actionPerformed(ActionEvent e) { x += dx; y += dy; if (makeOut() == false) { JOptionPane.showMessageDialog(null, "重新开始......"); speed = 700; snakeBody = 1; x = 5; y = 5; list.clear(); list.add(new Point(x, y)); listBody.clear(); listBody.add(list.get(0)); dx = 10; dy = 0; } addPoint(x, y); if (x == fx && y == fy) { speed = (int) (speed * 0.8);//速度增加参数 if (speed < 200) { speed = 100; } fx = rand.nextInt(30) * 10 + 5;// 2 fy = rand.nextInt(30) * 10 + 5;// 2 snakeBody++;// 2 } // 2 repaint(); } public void addPoint(int xx, int yy) { // 动态的记录最新发生的50步以内的移动过的坐标 // 并画出最新的snakeBody if (list.size() < 100) {//蛇身长度最长为100 list.add(new Point(xx, yy)); } else { list.remove(0); list.add(new Point(xx, yy)); } if (snakeBody == 1) { listBody.remove(0); listBody.add(0, list.get(list.size() - 1)); } else { listBody.clear(); if (list.size() < snakeBody) { for (int i = list.size() - 1; i > 0; i--) { listBody.add(list.get(i)); } } else { for (int i = list.size() - 1; listBody.size() < snakeBody; i--) { listBody.add(list.get(i)); } } } } public boolean makeOut() { if ((x < 3 || y < 3) || (x > 305 || y > 305)) { return false; } for (int i = 0; i < listBody.size() - 1; i++) { for (int j = i + 1; j < listBody.size(); j++) { if (listBody.get(i).equals(listBody.get(j))) { return false; } } } return true; } }

110,537

社区成员

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

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

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