Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование (VB,C#,ASP,.NET): новости, советы, примеры


Выпуск # 686

Друзья! Прошло совсем мало времени с момент последнего выпуска, и вот уже новый! Удивительно, как быстро летит время в Интернете, сколько всего нового происходит ежедневно, да что там, ежесекундно. И Kbyte.Ru в этом плане не исключение, на сайте столько всего произошло, столько всего, что многое даже и не влезло в этот выпуск! И кто только придумал ограничения скорости интернет-соединения и объемов писем! Эх..., благо на сайте есть живая лента событий, которая не даст потеряться среди гущи событий.
Надеюсь, этот выпуск будет интересен для вас. Если вы хотите увидеть в следующих выпусках что-то конкретное, напишите мне об этом на ящик subscribe@kbyte.ru.


Содержание выпуска

Читайте в этом выпуске:

Если у вас есть вопросы по программированию или работе с компьютером, не стесняйтесь, спрашивайте.

Форумы Kbyte.Ru

На форумах Kbyte.Ru постоянно появляются новые интересные темы и обсуждения. В этом выпуске представлены лишь новые темы, с момента прошлой рассылки.

Кстати, любой желающий может на форумах Kbyte.Ru совершенно свободно получить помощь грамотных специалистов в области программирования, да и в целом информационных технологий.

Задать свой вопрос прямо сейчас

Всем привет.Делаю графический редактор,нужно,чтобы отрисовывались на контроле picturebox линии из списка lines.Для этого создал класс Line,где данные для объекта tmp берутся из координат на контроле picturebox в обработчиках событий MouseDown и MouseUp.Для отрисования линий я беру точки из списка a и реализую рисование в методе Drawlines,но я не понял как создать экземляр объекта graphics компонента picturebox,чтобы в методе получалась прорисовка.Помогите,пожалуйста.
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.Drawing.Drawing2D;



namespace GraphCreator
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        Point start, end;
        List<Point> a = new List<Point>();//массив для хранения точек
        
        private void Form1_Load(object sender, EventArgs e)
        {
            this.pictureBox1.Image = new Bitmap(this.pictureBox1.Width, this.pictureBox1.Height);//для чего это не знаю
        }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)//при нажатии кнопки мыши 
        {
            start = e.Location;//записываем начальные координаты
            this.Invalidate();
        }

        private void pictureBox1_MouseEnter(object sender, EventArgs e)//при попадании мыши на picturebox
        {
            Cursor = Cursors.Cross;//курсор становится крестом
        }

        private void Form1_MouseEnter(object sender, EventArgs e)//при попадании мыши на форму
        {
            Cursor = Cursors.Default;//курсор становится стандартным
        }

        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)//при отпускании мыши
        {
             end = e.Location;//записываем конечные координаты
             this.Invalidate();
             pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint);//подключаем событие Paint
             
        }

        private void pictureBox1_Paint(object sender, PaintEventArgs e)//событие рисования
        {
            Graphics g = e.Graphics;//создаём местную версию графического объекта для picturebox
            Pen p = new Pen(Color.Black, 2);//создаём перо
           // g.DrawLine(p, start, end);//рисуем линию
           // int x1=start.X;
           // int y1=start.Y;
           // int x2=end.X;
            //int y2=end.Y;
            //g.DrawEllipse(p, x1,y1,x2,y2);
            pictureBox1.Refresh();
            Line tmp = new Line(start,end,a);//создание объекта в событии paint
            Line.Drawlines(tmp);//вызов метода-здесь ошибка Для нестатического поля, метода или свойства "GraphCreator.Form1.Line.Drawlines(GraphCreator.Form1.Line)" требуется ссылка на объект

        }
        public class Line
        {
            public Point p1,p2;
            public List<Point> a = new List<Point>();
            Graphics g = Graphics.FromHwndInternal(hwnd);//как здесь прописать экземпляр класса Graphics от picturebox
            public  Line(Point p1,Point p2,List<Point> a)//закидываем координаты точек в список
            {
                a.Add(p1);
                a.Add(p2);
            }
            public void Drawlines(Line tmp)//метод для отрисовки линий объекта tmp
            {
                Pen p = new Pen(Color.Black, 2);
                for (int i = 0; i < a.Count; i=+2)
                {
                    g.DrawLine(p, a[i], a[i + 1]);
                }
            }
        }
        
    }

}

[- к содержанию -]

Ответ #1 @Aleksey Nemiro 16.05.2012 20:51
Graphics g = Graphics.FromHwndInternal(hwnd);//как здесь прописать экземпляр класса Graphics от picturebox
проще всего передавать по ссылке
public Line(Graphics g, Point p1,Point p2,List<Point> a)
...
...
Line tmp = new Line(g, start,end,a);
...

[- к содержанию -]

Добавить свой ответ в эту тему
Здравствуйте одним из трёх способов открываю вкладку модемы

'control.exe — служит для работы с панелью управления
'telephon.cpl — оснастка панели управления для телефонии
'1 — номер вкладки, которую нужно активировать при открытии (отсчет с нуля)
Shell "control.exe telephon.cpl,,1"
 
'можно и так сразу открывается вторая вкладка
Shell "control.exe modem.cpl"
 
'MyID - идентификатор процесса
MyID = Shell("rundll32.exe shell32.dll, Control_RunDLL modem.cpl, Modems", vbNormalFocus)
как её считать и поместить в picturebox, это возможно?
как закрыть эту вкладку?
Подскажите код
Спасибо

[- к содержанию -]

Ответ #1 @Ципихович Эндрю 16.05.2012 16:40
Открыли - закрыли вкладку
Option Explicit

Private Declare Function GetForegroundWindow Lib "user32" () As Long
'
Sub OpenОткрыть_вкладку_модемы()

'отключаем дёргание экрана при выполнении кода
    Application.ScreenUpdating = False

    '1
    'control.exe — служит для работы с панелью управления
    'telephon.cpl — оснастка панели управления для телефонии
    '1 — номер вкладки, которую нужно активировать при открытии (отсчет с нуля)
    'Shell "control.exe telephon.cpl,,1"

    '2
    'можно и так сразу открывается вторая вкладка
    'Shell "control.exe modem.cpl"

    '3
    Shell "rundll32.exe shell32.dll, Control_RunDLL modem.cpl, Modems", vbNormalFocus

    'MyID - идентификатор процесса
    'MyID = Shell("rundll32.exe shell32.dll, Control_RunDLL modem.cpl, Modems", vbNormalFocus)

    'закрыть вкладку
    SendMessage GetForegroundWindow, &H10, 0&, 0&

    'отменяем отключенное ранее дёргание экрана при выполнении кода
    Application.ScreenUpdating = True

End Sub

можно это сделать "втёмную", как считать вкладку между открытием и закрытием и поместить её в picturebox?, это возможно?
Подскажите код

[- к содержанию -]

Добавить свой ответ в эту тему
Запрос https://api.vk.com/method/messages.get выдает ответ в формате JSON, который выглядит следующим образом:

{"response":[4680,{"body":"спасибо тебе...<br>да...пройдет....","title":"Re: ...",
"date":1268213453,"uid":28672529,"mid":10836,"read_state":0},{"body":"не за что)",
"title":"Re: ...","date":1268213443,"uid":58416643,"mid":10835,"read_state":0}]}

Проблема возникает с "4680". Так как этому значению не присвоено названия параметра.
как десериализировать этот запрос в C#?
Вот мои наброски:
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using Newtonsoft.Json;

namespace vkLibrary.Messages
{
	[JsonObject()]
	public class Messages
	{
		[JsonProperty(PropertyName = "")]
		public int _count;

		[JsonProperty(PropertyName = "response")]
		public List<Message> _messages;

		public Messages()
		{
		}

		public static Messages LoadFromFile()
		{
			Stream file = System.Windows.Application.GetResourceStream(new Uri("messages", UriKind.Relative)).Stream;
			JsonSerializer ser = new JsonSerializer();
			JsonReader jr = new JsonTextReader(new StreamReader(file));
			Messages m = new Messages();
			m = (Messages)ser.Deserialize(jr, typeof(Messages));
			return m;
		}
	}

	[JsonObject()]
	public class Message
	{
		private readonly System.DateTime unixTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);

		#region Fields

		/// <summary>
		/// ID сообщения. Не передаётся для пересланных сообщений. 
		/// </summary>
		internal long _mid;

		/// <summary>
		/// Автор сообщения 
		/// </summary>
		[JsonProperty(PropertyName = "uid")]
		internal long _uid;
		
		/// <summary>
		/// Дата отправки сообщения.
		/// </summary>
		[JsonProperty(PropertyName = "date")]
		internal long _date;
		
		/// <summary>
		/// Статус прочтения сообщения (0 – не прочитано, 1 – прочитано) Не передаётся для пересланных сообщений. 
		/// </summary>
		[JsonProperty(PropertyName = "read_state")]
		internal int _read_state;
		
		/// <summary>
		/// Тип сообщения (0 – полученное сообщение, 1 – отправленное сообщение). Не передаётся для пересланных сообщений.
		/// </summary>
		[JsonProperty(PropertyName = "out")]
		internal int _out;
		
		/// <summary>
		/// Заголовок сообщения или беседы.
		/// </summary>
		[JsonProperty(PropertyName = "title")]
		internal string _title;
		
		/// <summary>
		/// Текст сообщения.
		/// </summary>
		[JsonProperty(PropertyName = "body")]
		internal string _body;

		/// <summary>
		/// (только для групповых бесед) ID беседы.
		/// </summary>
		[JsonProperty(PropertyName = "chat_i")]
		internal int _chat_id;
		
		/// <summary>
		/// (только для групповых бесед) ID последних участников беседы, разделённых запятыми, но не более 6.
		/// </summary>
		[JsonProperty(PropertyName = "chat_active")]
		internal int _chat_active;
		
		/// <summary>
		/// (только для групповых бесед) количество участников в беседе.
		/// </summary>
		[JsonProperty(PropertyName = "users_count")]
		internal int _users_count;
		
		/// <summary>
		/// (только для групповых бесед) ID создателя беседы.
		/// </summary>
		[JsonProperty(PropertyName = "admin_id")]
		internal int _admin_id;

		#endregion

		#region Properties
		/// <summary>
		/// ID сообщения. Не передаётся для пересланных сообщений. 
		/// </summary>
		public long Mid
		{
			get
			{
				return this._mid;
			}
			private set
			{
				this._mid = value;
			}
		}

		/// <summary>
		/// Автор сообщения 
		/// </summary>
		public long Uid
		{
			get
			{
				return this._uid;
			}
			private set
			{
				this._uid = value;
			}
		}

		/// <summary>
		/// Дата отправки сообщения.
		/// </summary>
		public DateTime Date
		{
			get
			{
				return unixTime.AddSeconds((double)this._date);
			}
			private set
			{
				this._date = (long)(value - unixTime).TotalSeconds;
			}
		}

		/// <summary>
		/// Статус прочтения сообщения (0 – не прочитано, 1 – прочитано) Не передаётся для пересланных сообщений. 
		/// </summary>
		public int Read_state
		{
			get
			{
				return this._read_state;
			}
			private set
			{
				this._read_state = value;
			}
		}

		/// <summary>
		/// Тип сообщения (0 – полученное сообщение, 1 – отправленное сообщение). Не передаётся для пересланных сообщений.
		/// </summary>
		public int Out
		{
			get
			{
				return this._out;
			}
			private set
			{
				this._out = value;
			}
		}

		/// <summary>
		/// Заголовок сообщения или беседы.
		/// </summary>
		public string Title
		{
			get
			{
				return this._title;
			}
			private set
			{
				this._title = value;
			}
		}

		/// <summary>
		/// Текст сообщения.
		/// </summary>
		public string Body
		{
			get
			{
				return this._body;
			}
			private set
			{
				this._body = value;
			}
		}

		/// <summary>
		/// (только для групповых бесед) ID беседы.
		/// </summary>
		public int Chat_id
		{
			get
			{
				return this._chat_id;
			}
			private set
			{
				this._chat_id = value;
			}
		}

		/// <summary>
		/// (только для групповых бесед) ID последних участников беседы, разделённых запятыми, но не более 6.
		/// </summary>
		public int Chat_active
		{
			get
			{
				return this._chat_active;
			}
			private set
			{
				this._chat_active = value;
			}
		}

		/// <summary>
		/// (только для групповых бесед) количество участников в беседе.
		/// </summary>
		public int User_count
		{
			get
			{
				return this._users_count;
			}
			private set
			{
				this._users_count = value;
			}
		}

		/// <summary>
		/// (только для групповых бесед) ID создателя беседы.
		/// </summary>
		public int Admin_id
		{
			get
			{
				return this._admin_id;
			}
			private set
			{
				this._admin_id = value;
			}
		}

		#endregion
	}
}

[- к содержанию -]

Ответ #1 @Aleksey Nemiro 16.05.2012 10:11
{"response":[4680,{"body":"спасибо тебе...<br>да...пройдет....","title":"Re: ...",
"date":1268213453,"uid":28672529,"mid":10836,"read_state":0},{"body":"не за что)",
"title":"Re: ...","date":1268213443,"uid":58416643,"mid":10835,"read_state":0}]}
response - это массив, т.е. в C# для этого должен использовать какой-нибудь ArrayList или List<object>.
public List<Message> _messages;
вот тут, вместо Message поставить неопределенный тип - object.
public
List<object> _messages;
Это позволит добавлять в коллекцию числа и данные других типов.

[- к содержанию -]

Ответ #2 @korshunovartem 17.05.2012 15:00
Спасибо, буду пробовать:)

[- к содержанию -]

Ответ #3 @korshunovartem 17.05.2012 19:14
Вот исправленный рабочий вариант:

using System;
using System.Linq;
using System.Collections.Generic;
using System.IO;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace vkLibrary.Messages
{
	[JsonObject()]
	public class Messages
	{
		[JsonProperty(PropertyName = "response")]
		public List<Message> _messages;

		public Messages()
		{
		}

		public static Messages LoadFromFile()
		{
			Stream file = System.Windows.Application.GetResourceStream(new Uri("messages", UriKind.Relative)).Stream;
			JsonReader jr = new JsonTextReader(new StreamReader(file));
			JObject jObject = JObject.Load(jr);
			Messages m = new Messages();
			m._messages = jObject["response"].Children().Where(c => c.HasValues).Select(c => c.ToObject<Message>()).ToList();

			return m;
		}
	}

	[JsonObject()]
	public class Message
	{
		private readonly System.DateTime unixTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);

		#region Fields

		/// <summary>
		/// ID сообщения. Не передаётся для пересланных сообщений. 
		/// </summary>
		internal long _mid;

		/// <summary>
		/// Автор сообщения 
		/// </summary>
		[JsonProperty(PropertyName = "uid")]
		internal long _uid;
		
		/// <summary>
		/// Дата отправки сообщения.
		/// </summary>
		[JsonProperty(PropertyName = "date")]
		internal long _date;
		
		/// <summary>
		/// Статус прочтения сообщения (0 – не прочитано, 1 – прочитано) Не передаётся для пересланных сообщений. 
		/// </summary>
		[JsonProperty(PropertyName = "read_state")]
		internal int _read_state;
		
		/// <summary>
		/// Тип сообщения (0 – полученное сообщение, 1 – отправленное сообщение). Не передаётся для пересланных сообщений.
		/// </summary>
		[JsonProperty(PropertyName = "out")]
		internal int _out;
		
		/// <summary>
		/// Заголовок сообщения или беседы.
		/// </summary>
		[JsonProperty(PropertyName = "title")]
		internal string _title;
		
		/// <summary>
		/// Текст сообщения.
		/// </summary>
		[JsonProperty(PropertyName = "body")]
		internal string _body;

		/// <summary>
		/// (только для групповых бесед) ID беседы.
		/// </summary>
		[JsonProperty(PropertyName = "chat_i")]
		internal int _chat_id;
		
		/// <summary>
		/// (только для групповых бесед) ID последних участников беседы, разделённых запятыми, но не более 6.
		/// </summary>
		[JsonProperty(PropertyName = "chat_active")]
		internal int _chat_active;
		
		/// <summary>
		/// (только для групповых бесед) количество участников в беседе.
		/// </summary>
		[JsonProperty(PropertyName = "users_count")]
		internal int _users_count;
		
		/// <summary>
		/// (только для групповых бесед) ID создателя беседы.
		/// </summary>
		[JsonProperty(PropertyName = "admin_id")]
		internal int _admin_id;

		#endregion

		#region Properties
		/// <summary>
		/// ID сообщения. Не передаётся для пересланных сообщений. 
		/// </summary>
		public long Mid
		{
			get
			{
				return this._mid;
			}
			private set
			{
				this._mid = value;
			}
		}

		/// <summary>
		/// Автор сообщения 
		/// </summary>
		public long Uid
		{
			get
			{
				return this._uid;
			}
			private set
			{
				this._uid = value;
			}
		}

		/// <summary>
		/// Дата отправки сообщения.
		/// </summary>
		public DateTime Date
		{
			get
			{
				return unixTime.AddSeconds((double)this._date);
			}
			private set
			{
				this._date = (long)(value - unixTime).TotalSeconds;
			}
		}

		/// <summary>
		/// Статус прочтения сообщения (0 – не прочитано, 1 – прочитано) Не передаётся для пересланных сообщений. 
		/// </summary>
		public int Read_state
		{
			get
			{
				return this._read_state;
			}
			private set
			{
				this._read_state = value;
			}
		}

		/// <summary>
		/// Тип сообщения (0 – полученное сообщение, 1 – отправленное сообщение). Не передаётся для пересланных сообщений.
		/// </summary>
		public int Out
		{
			get
			{
				return this._out;
			}
			private set
			{
				this._out = value;
			}
		}

		/// <summary>
		/// Заголовок сообщения или беседы.
		/// </summary>
		public string Title
		{
			get
			{
				return this._title;
			}
			private set
			{
				this._title = value;
			}
		}

		/// <summary>
		/// Текст сообщения.
		/// </summary>
		public string Body
		{
			get
			{
				return this._body;
			}
			private set
			{
				this._body = value;
			}
		}

		/// <summary>
		/// (только для групповых бесед) ID беседы.
		/// </summary>
		public int Chat_id
		{
			get
			{
				return this._chat_id;
			}
			private set
			{
				this._chat_id = value;
			}
		}

		/// <summary>
		/// (только для групповых бесед) ID последних участников беседы, разделённых запятыми, но не более 6.
		/// </summary>
		public int Chat_active
		{
			get
			{
				return this._chat_active;
			}
			private set
			{
				this._chat_active = value;
			}
		}

		/// <summary>
		/// (только для групповых бесед) количество участников в беседе.
		/// </summary>
		public int User_count
		{
			get
			{
				return this._users_count;
			}
			private set
			{
				this._users_count = value;
			}
		}

		/// <summary>
		/// (только для групповых бесед) ID создателя беседы.
		/// </summary>
		public int Admin_id
		{
			get
			{
				return this._admin_id;
			}
			private set
			{
				this._admin_id = value;
			}
		}

		#endregion
	}
}

[- к содержанию -]

Добавить свой ответ в эту тему
Здравствуйте!
Помогите пожалуйста организовать:
1) сохранение нарисованного в PictureBox в файл
2) загрузку изображения из файла в PictureBox
3) очистку PictureBox

Рисование в PictureBox осуществляется этим кодом

Спасибо!

[- к содержанию -]

Ответ #1 @Aleksey Nemiro 14.05.2012 18:36
Добавил код в приведенный пример. См. прикрепленный файл.

[- к содержанию -]

Добавить свой ответ в эту тему
Задачка:

* Создайте перечисление из названий групп колледжа (например, RDIR21, RDIR22, RIDR23, RDDR21,...).
* Создайте «зубчатый» массив, где элементы каждой строки содержат фамилии студентов, обучающихся в соответствующих группах.
* Распечатайте фамилии студентов по каждой группе отдельно (создать функцию, где входным параметром является название группы или Все)
* Распечатайте фамилии студентов по каждой группе (создать функцию, где входным параметром является перечисление групп — пользователь может ввести от 1 до … - params)
* Найдите однофамильцев (функция).
* Осуществите поиск по фамилии и по фрагменту фамилии (функции)
* Программа должна содержать меню с выполненными пунктами задания

То что смог наваять:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Practica_3
{
  class Program
  {
    public enum Grupp : int { RDIR21, RDIR22, RIDR23, RDDR21 };
    public static string[][] student = new string[4][]{
        new string[3]{"Ivanov","Petrov","Sidorov"},
        new string[4]{"Galkin","Kirkorov","Petrosjan","Ivanov"},
        new string[4]{"Barykin","Kuzmin","Petrov","Butusov"},
        new string[3]{"Sharapova","Sidorov","Alsu"}};

    public static void Print(string poisk)
    {

      int count = Enum.GetValues(typeof(Grupp)).Length;
      int nomer = (int)Enum.Parse(typeof(Grupp), poisk);

      Console.WriteLine("Gruppa {1} : {0}", nomer,poisk);
      //Console.WriteLine("Kol-vo grupp: " + count);
      {
        for (int j = 0; j < student[nomer].Length; j++)
        {
          Console.WriteLine(student[nomer][j]);
        }
        Console.ReadLine();
      }
    }

    //ReadWrite=Read | Write;
    /* 
    public static void AllStudGrup()
    {
    }
    public static void DoubleStud()
    {
    }
    public static void FamStud()
    {
    }*/
    static void Main(string[] args)
    {
      string S = Console.ReadLine();
      Program.Print(S);
    
    }
    /*{
      int Menu;
      string S;
      do
      {
        Console.Clear();
        Console.WriteLine("  ");
        Console.WriteLine(" Menuu:");
        Console.WriteLine("1-> ");
        Console.WriteLine("2-> ");
        Console.WriteLine("3-> ");
        Console.WriteLine("4-> ");
        Console.WriteLine("5-> Vihod");
        S = Console.ReadLine();
        Menu = int.Parse(S);
      
    switch (Menu)
        {case 1:
            {
             break;}
         case 2:
            {Program.AllStudGrup();
             break;}
         case 3:
            {Program.DoubleStud();
             break;}
         case 4:
            {Program.FamStud();
             break;}
        }
      } while (Menu != 5);
    }
      */

    }
  }

[- к содержанию -]

Привет.Я смог сделать рисование прямых при помощи мыши,но при сворачивании окна все прямые исчезают,порывшись на форумах я нашел методы Invalidate() и refresh(),но при их использовании сразу нарисованная линия просто исчезает.Как сохранить линии на panel?Код:
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 GraphCreator
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
            List<Point> points = new List<Point>();//массив для хранения точек
            public int x1,y1;//начальные координаты прямой
            public int x2,y2;//конечные координаты прямой
            Pen p = new Pen(Color.Black, 2);//цвет пера с шириной 2
            bool offon = false;//лог переменная для проверки начала рисования
 
            private void panel1_MouseEnter(object sender, EventArgs e)//мышь попадает в область панели
            {
                Cursor = Cursors.Cross;//курсор становится крестом
            }
 
            private void panel1_MouseDown(object sender, MouseEventArgs e)//нажатие кнопки мыши
            {
                x1 = e.X;//записываем кооодинату x при нажатии мыши
                y1 = e.Y;//записываем координату y при нажатии мыши
                offon = true;//подтверждаем что рисование началось
            }
 
            private void panel1_MouseMove(object sender, MouseEventArgs e)//перемещение мыши
            {
               
            }
 
            private void panel1_MouseUp(object sender, MouseEventArgs e)
            {
                Graphics g = panel1.CreateGraphics();//объявляем объект g для рисования
                x2 = e.X;//
                y2 = e.Y;//
                if (offon == true)
                    g.DrawLine(p, x1, y1, x2, y2);
                offon = false;
                
            }
        
    }
 
}

[- к содержанию -]

Ответ #1 @EROS 12.05.2012 00:06
Рисуй в обработчике события Paint
Control.Paint event

[- к содержанию -]

Ответ #2 @Shark1 12.05.2012 00:11
Тут где-то на форуме подобное было но на VB.Net.
Вот тот-же код но на C#:

using Microsoft.VisualBasic;
using System.Windows.Forms;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Diagnostics;
using System.Collections;
public class Form1
{

private List<Line> lines = new List<Line>();
//позиция рисования

private Point start;
private void Form1_Load(System.Object sender, System.EventArgs e)
{
this.PictureBox1.Image = new Bitmap(this.PictureBox1.Width, this.PictureBox1.Height);
}

private void PictureBox1_MouseDown(System.Object sender, System.Windows.Forms.MouseEventArgs e)
{
//запоминаем начальную точку
this.start = e.Location;
}

private void PictureBox1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
//запоминаем точку где отпустили мышь
Point end = e.Location;

//создаем новую линию
this.lines.Add(new Line(this.start, end));

Rectangle area = new Rectangle(Math.Min(this.start.X, end.X), Math.Min(this.start.Y, end.Y), Math.Abs(this.start.X - end.X), Math.Abs(this.start.Y - end.Y));

area.Inflate(1, 1);

//обновляем PictureBox
this.PictureBox1.Invalidate(area);
this.PictureBox1.Update();
}

private void PictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
//рисуем линии
this.DrawLines(e.Graphics);
}

//сохраняем твои линии
private void Save()
{
using (Graphics g = Graphics.FromImage(this.PictureBox1.Image)) {
this.DrawLines(g);
}
this.Clear();
}

//очищаем PictureBox
private void Clear()
{
this.lines.Clear();
this.PictureBox1.Refresh();
}

//прорисовка линий
private void DrawLines(Graphics g)
{
foreach (Line line in this.lines) {
g.DrawLine(Pens.Black, line.Start, line.End);
}
}

}

public class Line
{


private Point _start;

private Point _end;
public Point Start {
get { return this._start; }
set { this._start = value; }
}

public Point End {
get { return this._end; }
set { this._end = value; }
}

public Line() : this(Point.Empty, Point.Empty)
{
}

public Line(Point start, Point end)
{
this._start = start;
this._end = end;
}
}

[- к содержанию -]

Ответ #3 @GreatTalker 13.05.2012 10:39
Во втором примере мне практически ничего непонятно,решил сделать по примеру события paint из msdn-теперь линии вообще не рисуются...что я сделал не так?Код:
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 GraphCreator
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        Point start, end;
        List<Point> points = new List<Point>();//массив для хранения точек
        private void Form1_Load(object sender, EventArgs e)
        {
            this.pictureBox1.Image = new Bitmap(this.pictureBox1.Width, this.pictureBox1.Height);//для чего это не знаю
        }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)//при нажатии кнопки мыши 
        {
            start = e.Location;//записываем начальные координаты
        }

        private void pictureBox1_MouseEnter(object sender, EventArgs e)//при попадании мыши на picturebox
        {
            Cursor = Cursors.Cross;//курсор становится крестом
        }

        private void Form1_MouseEnter(object sender, EventArgs e)//при попадании мыши на форму
        {
            Cursor = Cursors.Default;//курсор становится стандартным
        }

        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)//при отпускании мыши
        {
             end = e.Location;//записываем конечные координаты
             pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint);//подключаем событие Paint
        }

        private void pictureBox1_Paint(object sender, PaintEventArgs e)//событие рисования
        {
            Graphics g = e.Graphics;//создаём местную версию графического объекта для picturebox
            Pen p = new Pen(Color.Black, 2);//создаём перо
            g.DrawLine(p, start, end);//рисуем линию
        }
            
        
    }

}

[- к содержанию -]

Ответ #4 @GreatTalker 13.05.2012 11:11
Сделал с refresh в делегате mouse up.Теперь линия рисуется и остаётся,но предыдущая исчезает.Получается,линии нужно заносить в список чтобы они сохранялись и отрисовывать их заново?
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 GraphCreator
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        Point start, end;
        List<Point> points = new List<Point>();//массив для хранения точек
        private void Form1_Load(object sender, EventArgs e)
        {
            this.pictureBox1.Image = new Bitmap(this.pictureBox1.Width, this.pictureBox1.Height);//для чего это не знаю
        }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)//при нажатии кнопки мыши 
        {
            start = e.Location;//записываем начальные координаты
        }

        private void pictureBox1_MouseEnter(object sender, EventArgs e)//при попадании мыши на picturebox
        {
            Cursor = Cursors.Cross;//курсор становится крестом
        }

        private void Form1_MouseEnter(object sender, EventArgs e)//при попадании мыши на форму
        {
            Cursor = Cursors.Default;//курсор становится стандартным
        }

        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)//при отпускании мыши
        {
             end = e.Location;//записываем конечные координаты
             pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint);//подключаем событие Paint
             Refresh();
        }

        private void pictureBox1_Paint(object sender, PaintEventArgs e)//событие рисования
        {
            Graphics g = e.Graphics;//создаём местную версию графического объекта для picturebox
            Pen p = new Pen(Color.Black, 2);//создаём перо
            g.DrawLine(p, start, end);//рисуем линию
        }
            
        
    }

}

[- к содержанию -]

Добавить свой ответ в эту тему
Не могу понять как в модуле экономическая оценка используется поле scepka. при расчете идет ошибка if scepka="o" и предлагает уйти на отладку.файл прилагаю.

[- к содержанию -]

Все темы и обсуждения

Исходные коды

WPF 3D Content

Visual Basic .NET: Графика @Shark1 15.05.2012 01:31
Пример размещения 2D контента на 3D поверхности.
На примере 3D видео-плеера.
Колесом мыши масштабируем, клавишами клавиатуры(Left & Right) поворачиваем окно по оси Y.

К данном исходному коду прилагаются файлы примеров. Скачать.

[- к содержанию -]

Маленький пример по работе с Brushes

Visual Basic .NET: Графика @Shark1 11.05.2012 04:46
Собственно ничего нового:
В одном варианте кисти грузятся в список(System Brushes) - используются привязки к списку, в другом варианте можно настроить кисть самому.

К данном исходному коду прилагаются файлы примеров. Скачать.

[- к содержанию -]

Все исходные коды

Вакансии в IT

Web дизайнер

Россия, Нижний Новгород | Работа в офисе | 20 000.00 KBP

SEO оптимизатор

Россия, Нижний Новгород | Работа в офисе | 25 000.00 KBP

Программист, веб-мастер

Россия, Чебоксары | Работа в офисе | 22 000.00 KBP

Web-программист Python

Россия, Ростов-на-Дону | Работа в офисе

Веб-программист

Россия, Ростов-на-Дону | Работа в офисе | 45 000.00 KBP

Веб-программист, PHP программист

Россия, Ростов-на-Дону | Работа в офисе | 35 000.00 KBP

SEO оптимизатор

Россия, Нижний Новгород | Работа в офисе

SEO оптимизатор

Россия, Нижний Новгород | Работа в офисе

SEO специалист

Россия, Чебоксары | Работа в офисе | 15 000.00 KBP

Программист C#

Россия, Красноярск | Работа в офисе | 30 000.00 KBP

Все вакансии в IT · Создать резюме

[- к содержанию -]

Новости мира IT

В Японии создан беспроводной чип, передающий данные на скорости 1,5 Гбит/сек

Японский производитель полупроводников Rohm сегодня сообщил о совместном проекте со специалистами из Университета Осаки над прототипом нового чипа, способного передавать рекордные 1,5 гигабита данных в секунду при помощи всего одного радиоканала. Правда, работает новый японский чип в довольно сложном для использования терагерцевом микроволновом радиодиапазоне.

Терагерцевый диапазон представляет собой диапазон радиоволн с частотой от 100 гигагерц до 10 терагерц. Японские эксперты говорят, что создание радиопередающих устройств в терагерцевом диапазоне имеет свои плюсы и минусы. К первым относится возможность создания очень производительных устройств связи, работающих в десятки раз быстрее, чем современные сети WiFi или LTE. Однако оборотной стороной этих преимуществ является небольшая длина распространения таких волн, поэтому создать передатчики, которые будут работать на расстоянии километров друг от друга здесь почти невозможно.

В Rohm ничего не говорят о том, как далеко может работать их радиопередатчик, однако компания заявляет, что новый чип не только способен передать огромные массивы информации без проводов, но и обладает малыми размерами, а также низкой ценой. В компании говорят, что их терагерцевый передатчик стоит всего 1,30 долларов, что соответствует цене чипа, работающего на скорости в 100 мегабит/сек.

17.05.2012 13:37 · Категория: Железо · Источник: CyberSecurity.ru

[- к содержанию -]

Новый сетевой червь заражает RAR-архивы

В сети зафиксировано широкое распространение новой вредоносной программы-червя Win32.HLLW.Autoruner.64548, способной заражать RAR-архивы. Червь «умеет» загружать с удаленного сервера злоумышленников исполняемые файлы, которые могут нести вредоносный функционал.

Как сообщили в антивирусной компании "Доктор Веб", вредоносная программа Win32.HLLW.Autoruner.64548 распространяется так же, как и многие другие черви: создает свою копию на диске и размещает в корневой папке файл autorun.inf, запускающий червя при подключении устройства. Начав свою работу на инфицированном компьютере, Win32.HLLW.Autoruner.64548 ищет на дисках RAR-архивы и записывает себя в них, используя одно из следующих имен: secret.exe, AVIRA_License.exe, Warcraft_money.exe, CS16.exe, Update.exe, private.exe, Autoruns.exe, Tutorial.exe, Autorun.exe, Readme.exe, Real.exe, readme.exe, Keygen.exe, Avast_keygen.exe. В некоторых случаях после подобной модификации архивы повреждаются.

Кроме того, червь имеет модуль полезной нагрузки. Также в его теле содержится исполняемый файл, который Win32.HLLW.Autoruner.64548 сохраняет в папку установки Windows в виде библиотеки mssys.dll. Ссылку на эту библиотеку вредоносная программа записывает в системный реестр. Полезную нагрузку червь встраивает в копию собственного процесса. Затем вредоносная программа соединяется с удаленным сервером злоумышленников и ожидает команд на загрузку и запуск исполняемых файлов.

Win32.HLLW.Autoruner.64548 — представитель достаточно редкой категории вредоносных программ, способных заражать RAR-архивы. При распаковке RAR-архивов следует обратить внимание, не появились ли внутри подозрительные исполняемые файлы: их случайный запуск может нанести вред компьютеру.

16.05.2012 10:46 · Категория: Безопасность · Источник: CyberSecurity.ru

[- к содержанию -]

Обновление для антивируса заблокировало работу компьютеров

Платные версии антивируса Avira после очередного обновления начали принимать за вирусы программы из пакета Office, браузер Opera и системные процессы Windows. В ряде случаев это сделало невозможной нормальную работу на компьютере. Разработчики Avira признали ошибку и выпустили "заплатку".

16.05.2012 10:45 · Категория: Безопасность · Источник: Lenta.ru

[- к содержанию -]

Все новости


Подпишитесь на тематические RSS-ленты Kbyte.Ru, чтобы быть в курсе последних новостей:

Основная лента · Форумы (темы и сообщения) · Visual Basic 5.0/6.0 · Visual Basic .NET · C# (Си шарп) · Delphi · JavaScript · ActionScript · ASP .NET · ASP .NET MVC

Ищите Kbyte.Ru в социальных сетях FaceBook, ВКонтакте, Twitter.

Если вы занимаетесь программированием, то наверняка вам пригодятся хитрые инструменты.


Международный портал для программистов и разработчиков Kbyte.Ru основан в 2006 году. Целью портала является объединение программистов и специалистов IT-бизнеса, студентов и преподавателей для обмена опытом и знаниями, оказания помощи во всех делах и начинаниях в области IT.
Kbyte.Ru является парнёром компаний Mail.Ru Group, WebMoney Transfer, Ozon.Ru и др.
Выпуск рассылки подготовлен автоматически. Все права на материалы выпуска принадлежат Kbyte.Ru если иное не указано отдельно.


В избранное