Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
9 / 9 / 5
Регистрация: 24.03.2014
Сообщений: 313
1

Создать свой Рабочий стол

05.02.2015, 21:19. Показов 4966. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте уважаемые пользователи!
Мне необходимо сделать своё подобие рабочего стола Windows. принцип такой:
Есть рабочая область - Panel
На ней при каждом новом запуске программы должны создаваться ярлыки в виде PictureBox с текстом ниже, и при этом они читаются и из папки(например "C:\desktop\"), которые записаны там в файлах имя ярлыка.link
P.S. .link - это расширение, а буквы перед расширением - это его настоящие имя, которое и будет отображаться под picturebox.
Я уже сделал наработки для ListView, но мне не нравится что их потом нельзя двигать, а хотелось бы чтобы их можно было свободно двигать по всей площади!
код ListView
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
// при загрузке формы
desktop.BeginUpdate(); desktop.Items.Clear();
            //получаем список файлов
            string[] files = Directory.GetFiles(@"Users\" + My.name + @"\life\desktop\");
            foreach (var s in files) {  string filename = Path.GetFileName(s); string fl = filename.Substring(0, filename.Length - 5);  desktop.Items.Add(fl, 0); }
 
//обработчик клика
 private void dekstop_ItemActivate(object sender, EventArgs e)
        {
// здесь открывается ссылка ярлыка, которая прописана в самом файле .link
            string fll = System.IO.File.ReadAllText(@"Users\" + My.name + @"\life\desktop\" + desktop.SelectedItems[0].Text + ".link");
            Process.Start(fll);
        }
Заранее МЕГА спасибо!

Добавлено через 2 часа 25 минут
нашёл и добавил следующее:
C#
1
2
3
4
5
6
7
8
PictureBox icon = new PictureBox();
            icon.Load(Environment.CurrentDirectory + @"icon.png");
            icon.Location = new Point(Cursor.Position.X, Cursor.Position.Y); icon.BackColor = System.Drawing.Color.Transparent;
            icon.Cursor = System.Windows.Forms.Cursors.Hand; icon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
            icon.TabIndex = 0; icon.TabStop = false; icon.Size = new System.Drawing.Size(42, 42);
            Label label = new Label();
            label.Text = "icon!"; label.Location = new Point(icon.Location.X + 5, icon.Location.Y + 44); label.BackColor = System.Drawing.Color.Transparent;
            this.Controls.Add(label); this.Controls.Add(icon);
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.02.2015, 21:19
Ответы с готовыми решениями:

Как создать ярлык exe файла на рабочий стол?
Как создать ярлык exe файла на рабочий стол, библиотеку using IWshRuntimeLibrary; я подключил

PictureBox - трансляция на рабочий стол
Здравствуйте. Имеется форма с PictureBox - на ней мы можем рисовать по клику мышкой. Нужно...

Сохранение файла Excel на рабочий стол по умолчанию
Всем доброго дня Подскажите как можно сделать чтобы при экспорте данных из DGV в Excel файл...

Защищенный рабочий стол
Добрый день. Делаю программу которая не даёт сидеть за компьютером более 30 минут без отдыха. Но не...

3
Эксперт .NETАвтор FAQ
10418 / 5148 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
05.02.2015, 23:09 2
Цитата Сообщение от slenderface Посмотреть сообщение
необходимо сделать своё подобие рабочего стола Windows
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
 
namespace WindowsFormsApplication238
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            var pn = new FileLinkPanel("C:\\") { Parent = this, Dock = DockStyle.Fill };
            pn.Arrange();
        }
    }
 
    internal class FileLinkPanel : UserControl
    {
        public FileLinkPanel()
        {
            BorderStyle = BorderStyle.FixedSingle;
            AutoScroll = true;
        }
 
        public FileLinkPanel(string dirPath) : this()
        {
            foreach (var f in Directory.EnumerateFiles(dirPath))
            {
                var fl = new FileLink(f) {Parent = this};
                ControlMover.Add(fl);
            }
        }
 
        public void Arrange()
        {
            var x = 0;
            var y = 0;
            var maxY = 0;
            foreach(Control ctrl in this.Controls)
            {
                if(x > 0 && x + ctrl.Width > ClientSize.Width)
                {
                    x = 0;
                    y += maxY;
                    maxY = 0;
                }
                ctrl.Location = new Point(x, y);
                x += ctrl.Width;
                if (ctrl.Height > maxY) maxY = ctrl.Height;
            }
        }
 
        protected override void OnResize(EventArgs e)
        {
            base.OnResize(e);
            Arrange();
        }
    }
 
    class FileLink : Control
    {
        public string FilePath { get; private set; }
        public Icon Icon { get; private set; }
 
        public FileLink()
        {
            SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint, true);
            //BackColor = Color.Gray;
            Width = 40;
            Height = 50;
        }
 
        public FileLink(string filePath) : this()
        {
            FilePath = filePath;
            try
            {
                Icon = Icon.ExtractAssociatedIcon(filePath);
            }catch
            {
                Icon = null;
            }
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
 
            var x = 0;
            if(Icon != null)
            {
                e.Graphics.DrawIcon(Icon, 0, 0);
                x += Icon.Height + 2;
            }
 
            var s = Path.GetFileName(FilePath);
            using (var brush = new SolidBrush(ForeColor))
                e.Graphics.DrawString(s, Font, brush, 0, x);
        }
 
        protected override void OnDoubleClick(EventArgs e)
        {
            base.OnDoubleClick(e);
            Process.Start(FilePath);
        }
    }
 
    static class ControlMover
    {
        private static readonly Dictionary<Control, Point> startMouse = new Dictionary<Control,Point>();
        private static readonly Dictionary<Control, Point> startLocation = new Dictionary<Control, Point>();
 
        public static void Add(Control  ctrl)
        {
            ctrl.MouseDown += ctrl_MouseDown;
            ctrl.MouseMove += ctrl_MouseMove;
        }
 
        public static void Remove(Control ctrl)
        {
            ctrl.MouseDown -= ctrl_MouseDown;
            ctrl.MouseMove -= ctrl_MouseMove;
        }
 
        static void ctrl_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button != MouseButtons.Left)
                return;
            var ctrl = sender as Control;
            var l = ctrl.PointToScreen(e.Location);
            var startPoint = startMouse[ctrl];
            var dx = l.X - startPoint.X;
            var dy = l.Y - startPoint.Y;
            Point newLoc;
 
            if (Math.Max(Math.Abs(dx), Math.Abs(dy)) > 5)
                newLoc = startLocation[ctrl] + new Size(dx, dy);
            else
                newLoc = startLocation[ctrl];
 
            if (newLoc.X < 0) newLoc = new Point(0, newLoc.Y);
            if (newLoc.Y < 0) newLoc = new Point(newLoc.X, 0);
            ctrl.Location = newLoc;
            ctrl.BringToFront();
        }
 
        static void ctrl_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button != MouseButtons.Left)
                return;
            var ctrl = sender as Control;
            startMouse[ctrl] =  ctrl.PointToScreen(e.Location);
            startLocation[ctrl] = ctrl.Location;
        }
    }
}
3
0 / 0 / 0
Регистрация: 27.04.2021
Сообщений: 15
18.12.2021, 22:14 3
Приветствую, у тебя случайно не осталось папки с проектом?)
0
Эксперт .NETАвтор FAQ
10418 / 5148 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
19.12.2021, 09:48 4
Цитата Сообщение от Derped Посмотреть сообщение
случайно не осталось папки с проектом?
Там же выложен полностью код. Разве сложно создать новый проект и вставить код?
Вложения
Тип файла: zip WindowsFormsApp9.zip (9.5 Кб, 44 просмотров)
0
19.12.2021, 09:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2021, 09:48
Помогаю со студенческими работами здесь

C# windows service рабочий стол
Добрый день ! Вопросик такой возник , помогите разобраться. Пишу сервис под вин хп и выше...

Иконка программы на рабочий стол
Как на C# отправить иконку программы: 1. На Рабочий Стол. 2. В панель Быстрого Запуска. 3. В...

Сохранение файла на рабочий стол
Вот написал первую свою прогу на С#. using System; using System.Collections.Generic; using...

Скачивание файлов на рабочий стол
Подскажите как: Мне скачать rar - zip Архив на рабочий стол Пробовал так ничего не получилось ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru