Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
daniel_kobica
4 / 4 / 2
Регистрация: 26.10.2014
Сообщений: 114
1

Как отобразить на другой вкладке tabControl картинку?

16.02.2016, 22:48. Просмотров 1013. Ответов 15

На tabControl1 имеется несколько вкладок, на первой вкладке располагается listBox1. Нужно сделать так, если выбрано 1-е значение в listBox, то на второй вкладке tabControl1 загружаются картинки. Вот часть кода как я это делаю:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            switch (listBox1.SelectedIndex)
            {
                case 0: StreamReader streamReader = new StreamReader(@"Text files/vbbook.txt", Encoding.Default); //Открываем файл для чтения
                    { 
                        string str = ""; //Объявляем переменную, в которую будем записывать текст из файла
                        //
                        while (!streamReader.EndOfStream) //Цикл длиться пока не будет достигнут конец файла
                        {
                            str += streamReader.ReadLine(); //В переменную str по строчно записываем содержимое файла
                        }
 
                        label1.Text = str;
 
                        tabPage2.list.Add(new ImageItem { Comment = "ОАО «---»", Duration = new TimeSpan(0, 0, 0), Image = new Bitmap(new WebClient { Proxy = null }.OpenRead("http://s1.n1.by/sites/default/files/imagecache/full/news/10/03/315201/1317654038.jpg")) });
                        tabPage2.list.Add(new ImageItem { Comment = "ОАО «---»", Duration = new TimeSpan(0, 0, 0), Image = new Bitmap(new WebClient { Proxy = null }.OpenRead("http://s13.ru/wp-content/upl/2013/12/2013-12-09_161918.jpg")) });
                        tabPage2.list.Add(new ImageItem { Comment = "ОАО «---»", Duration = new TimeSpan(0, 0, 0), Image = new Bitmap(new WebClient { Proxy = null }.OpenRead("http://grodno24.com/assets/images/2014/02/grodno_azot.jpg")) });
                        tabPage2.list.Add(new ImageItem { Comment = "ОАО «---»", Duration = new TimeSpan(0, 0, 0), Image = new Bitmap(new WebClient { Proxy = null }.OpenRead("http://mplast.by/wp-content/uploads/2016/01/Grodno-Azot-5.jpg")) });
                    }
                    return;
            }
        }
Если делаю так, то ругается на ".list" текст ошибки: "не удалось найти метод расширения принимающий первый аргумент типа "list", принимающий первый аргумент типа "System.Windows.Forms.TabPage"". Если убрать tabPage2, то всё работает, только картинки появляются на 1-й вкладке, их не видно, так как их закрывает listBox, расположенный на этой вкладке. Так как сделать, что бы картинки отображались на 2-й вкладке?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2016, 22:48
Ответы с готовыми решениями:

TabControl: как определить и привязать действие к определенной вкладке
Здравствуйте! Подскажите, как например определить и привязать действие к...

TabControl цвет вкладке
Подскажите пожалуйста, как в TabControl изменить цвет вкладки когда она...

Как отобразить DataGridView на всех вкладках TabControl
У меня есть обычный TabControl на форме. На одной из вкладок есть DataGridView,...

Создание textbox во вкладке TabControl
Здравствуйте. Имеется Tabcontrol и в нем несколько вкладок. На каждой вкладке -...

Как вставить картинку во всю вкладку в TabControl?
всем привет скажите как вставить картинку во всю вкладку в tabControl что бы...

15
Someone007
2227 / 1795 / 820
Регистрация: 09.05.2015
Сообщений: 4,426
Завершенные тесты: 1
16.02.2016, 23:39 2
Так поместите ваш "list" на вторую вкладку.
1
daniel_kobica
4 / 4 / 2
Регистрация: 26.10.2014
Сообщений: 114
17.02.2016, 01:12  [ТС] 3
Цитата Сообщение от Someone007 Посмотреть сообщение
Так поместите ваш "list" на вторую вкладку.
на какое именно свойство его кидать? И да, list у меня уже задан
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public partial class Form2 : Form
    {
        public ImageItemList list = new ImageItemList();
public Form2()
        {
            InitializeComponent();
 
            Size = new Size(800, 900);
            BackColor = Color.FromArgb(255, 60, 60, 60);
 
            var slider = new ImageItemSlider { Parent = this, Top = 100, Width = ClientSize.Width, Height = 200, Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Left };
            slider.Build(list);
 
            new Button { Parent = this, Text = "<Prev", BackColor = Color.White }.Click += delegate { slider.CurentSlide--; };
            new Button { Parent = this, Text = "Next>", BackColor = Color.White, Left = 100 }.Click += delegate { slider.CurentSlide++; };
 
            var pb = new PictureBox { Parent = this, Top = 400, Left = Width / 2 - 200, Width = 400, Height = 400, SizeMode = PictureBoxSizeMode.Zoom };
            slider.ImageClick += delegate { pb.Image = list[slider.HoveredImageIndex].Image; };
 
        }
0
Someone007
2227 / 1795 / 820
Регистрация: 09.05.2015
Сообщений: 4,426
Завершенные тесты: 1
17.02.2016, 05:35 4
Что такое ImageItemList, ImageItemSlider? Похоже что какие-то контролы, хотя гугл про них ничего не знает. Если это действительно контролы, с помощью дизайнера из можно разместить на нужной вкладке.
1
SeIZVeIZ
668 / 620 / 260
Регистрация: 08.02.2014
Сообщений: 1,905
Завершенные тесты: 3
17.02.2016, 11:18 5
Цитата Сообщение от daniel_kobica Посмотреть сообщение
C#
1
2
3
public partial class Form2 : Form
 {
 public ImageItemList list = new ImageItemList();
Так у тебя объявлено это поле для Form2, но никак не для tabPage2. И использование идёт на форме. Что ты собираешься сделать не понятно из предложенных кусков не связанных между собой кроме названия переменной.
1
daniel_kobica
4 / 4 / 2
Регистрация: 26.10.2014
Сообщений: 114
17.02.2016, 17:29  [ТС] 6
Цитата Сообщение от Someone007 Посмотреть сообщение
Что такое ImageItemList, ImageItemSlider?
Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
Что ты собираешься сделать не понятно
Вот прикрепил скрин, с объяснением, что должно выйти.
А вот целый код (С ошибкой, которую я описал выше)
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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Drawing.Drawing2D;
using System.IO;
 
namespace Еврорегион_Неман
{
    public partial class Form2 : Form
    {
        public ImageItemList list = new ImageItemList();
        public Form2()
        {
            InitializeComponent();
 
            Size = new Size(800, 900);
            BackColor = Color.FromArgb(255, 60, 60, 60);
 
            var slider = new ImageItemSlider { Parent = this, Top = 100, Width = ClientSize.Width, Height = 200, Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Left };
            slider.Build(list);
 
            new Button { Parent = this, Text = "<Prev", BackColor = Color.White }.Click += delegate { slider.CurentSlide--; };
            new Button { Parent = this, Text = "Next>", BackColor = Color.White, Left = 100 }.Click += delegate { slider.CurentSlide++; };
 
            var pb = new PictureBox { Parent = this, Top = 400, Left = Width / 2 - 200, Width = 400, Height = 400, SizeMode = PictureBoxSizeMode.Zoom };
            slider.ImageClick += delegate { pb.Image = list[slider.HoveredImageIndex].Image; };
 
        }
 
        public class ImageItemSlider : Control
        {
            public int ImagesPerSlide { get; set; }
            public int CurentSlide { get; set; }
            public Padding ImagePaddings { get; set; }
            private ImageItemDrawer ImageItemDrawer { get; set; }
            public int AnimateSpeed { get; set; }
            public int HoveredImageIndex { get; set; }
            public event EventHandler ImageClick = delegate { };
            public bool IsAnimatedNow { get; private set; }
 
            private ImageItemList items;
            private int HScroll;
 
            public ImageItemSlider()
            {
                SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint | ControlStyles.ResizeRedraw, true);
 
                ImagesPerSlide = 3;
                ImageItemDrawer = new ImageItemDrawer();
                AnimateSpeed = 40;
                Cursor = Cursors.Hand;
 
                Application.Idle += Animate;
            }
 
            private void Animate(object sender, EventArgs e)
            {
                var expectedHScroll = ClientSize.Width * CurentSlide;
                if (HScroll != expectedHScroll)
                {
                    var speed = Math.Abs(HScroll - expectedHScroll) <= AnimateSpeed ? 1 : AnimateSpeed;
                    HScroll += speed * Math.Sign(expectedHScroll - HScroll);
                    Invalidate();
                    IsAnimatedNow = true;
                }
                else
                    IsAnimatedNow = false;
            }
 
            public void Build(ImageItemList items)
            {
                this.items = items;
            }
 
            protected override void OnPaint(PaintEventArgs e)
            {
                var imgWidth = ClientSize.Width / ImagesPerSlide;
 
                for (int i = 0; i < items.Count; i++)
                {
                    var x = i * imgWidth - HScroll;
                    var rect = new Rectangle(x, ClientRectangle.Top, imgWidth, ClientSize.Height);
                    if (e.ClipRectangle.IntersectsWith(rect))
                    {
                        if (i == HoveredImageIndex)
                            using (var brush = new LinearGradientBrush(rect, BackColor, Color.Orange, 90))
                            {
                                e.Graphics.FillRectangle(brush, rect);
                            }
 
                        ImageItemDrawer.Draw(e.Graphics, rect, items[i]);
                    }
                }
            }
 
            protected override void OnMouseMove(MouseEventArgs e)
            {
                base.OnMouseMove(e);
                if (!IsAnimatedNow)
                {
                    HoveredImageIndex = PointToIndex(e.Location);
                    Invalidate();
                }
            }
 
            protected override void OnMouseDown(MouseEventArgs e)
            {
                base.OnMouseDown(e);
 
                if (!IsAnimatedNow)
                    if (e.Button == MouseButtons.Left)
                        if (HoveredImageIndex >= 0 && HoveredImageIndex < items.Count)
                            ImageClick(this, EventArgs.Empty);
            }
 
            /// <summary>
            /// Returns index of ImageIndex in given point
            /// </summary>
            public int PointToIndex(Point p)
            {
                var imgWidth = ClientSize.Width / ImagesPerSlide;
                return (p.X + HScroll) / imgWidth;
            }
        }
 
        public class ImageItemDrawer
        {
            public int BottomStripHeight = 30;
            public Color BottomStripColor = Color.FromArgb(100, 0, 0, 0);
            public Color BottomStripTextColor = Color.White;
            public Font BottomStripTextFont = new Font(FontFamily.GenericSansSerif, 12);
            public Padding Paddings = new Padding(5, 2, 5, 2);
 
            public virtual void Draw(Graphics gr, Rectangle rect, ImageItem item)
            {
                //image rect with paddings
                rect = new Rectangle(rect.Left + Paddings.Left, rect.Top + Paddings.Top, rect.Width - Paddings.Left - Paddings.Right, rect.Height - Paddings.Top - Paddings.Bottom);
                //bottom strip rect
                var strip = new Rectangle(rect.Left, rect.Top + rect.Height - BottomStripHeight, rect.Width, BottomStripHeight);
                //draw image
                gr.DrawImage(item.Image, rect);
                //draw bottom strip
                using (var brush = new SolidBrush(BottomStripColor))
                {
                    gr.FillRectangle(brush, strip);
                    brush.Color = BottomStripTextColor;
                    var sf = new StringFormat { LineAlignment = StringAlignment.Center };
                    gr.DrawString(item.Comment, BottomStripTextFont, brush, strip, sf);
                    sf.Alignment = StringAlignment.Far;
                    gr.DrawString(item.Duration.ToString(), BottomStripTextFont, brush, strip, sf);
                }
            }
        }
 
        public class ImageItemList : List<ImageItem>
        {
        }
 
        public class ImageItem
        {
            public Image Image { get; set; }
            public string Comment { get; set; }
            public TimeSpan Duration { get; set; }
        }
 
        private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            switch (listBox1.SelectedIndex)
            {
                case 0: StreamReader streamReader = new StreamReader(@"Text files/vbbook.txt", Encoding.Default); //Открываем файл для чтения
                    { 
                        string str = ""; //Объявляем переменную, в которую будем записывать текст из файла
                        //
                        while (!streamReader.EndOfStream) //Цикл длиться пока не будет достигнут конец файла
                        {
                            str += streamReader.ReadLine(); //В переменную str по строчно записываем содержимое файла
                        }
 
                        label1.Text = str;
 
                        tabPage2.list.Add(new ImageItem { Comment = "ОАО «---»", Duration = new TimeSpan(0, 0, 0), Image = new Bitmap(new WebClient { Proxy = null }.OpenRead("http://s1.n1.by/sites/default/files/imagecache/full/news/10/03/315201/1317654038.jpg")) });
                        //tabPage2.list.Add(new ImageItem { Comment = "ОАО «---»", Duration = new TimeSpan(0, 0, 0), Image = new Bitmap(new WebClient { Proxy = null }.OpenRead("http://s13.ru/wp-content/upl/2013/12/2013-12-09_161918.jpg")) });
                       //tabPage2.list.Add(new ImageItem { Comment = "ОАО «---»", Duration = new TimeSpan(0, 0, 0), Image = new Bitmap(new WebClient { Proxy = null }.OpenRead("http://grodno24.com/assets/images/2014/02/grodno_azot.jpg")) });
                        //tabPage2.list.Add(new ImageItem { Comment = "ОАО «---»", Duration = new TimeSpan(0, 0, 0), Image = new Bitmap(new WebClient { Proxy = null }.OpenRead("http://mplast.by/wp-content/uploads/2016/01/Grodno-Azot-5.jpg")) });
                    }
                    return;
            }
        }
    }
}
0
Миниатюры
Как отобразить на другой вкладке tabControl картинку?  
SeIZVeIZ
668 / 620 / 260
Регистрация: 08.02.2014
Сообщений: 1,905
Завершенные тесты: 3
17.02.2016, 17:41 7
Поместите ImageItemSlider на закладку с галереей, ему присвоится значение что-то вроде imageItemSlider1 и тогда вместо:
C#
1
tabPage2.list.Add(new ImageItem { Comment = "ОАО «---»", Duration = new TimeSpan(0, 0, 0), Image = new Bitmap(new WebClient { Proxy = null }.OpenRead("http://s1.n1.by/sites/default/files/imagecache/full/news/10/03/315201/1317654038.jpg")) });
используйте:
C#
1
imageItemSlider1.Add(new ImageItem { Comment = "ОАО «---»", Duration = new TimeSpan(0, 0, 0), Image = new Bitmap(new WebClient { Proxy = null }.OpenRead("http://s1.n1.by/sites/default/files/imagecache/full/news/10/03/315201/1317654038.jpg")) });
Если я Вас правильно понял, то должно сработать.
1
daniel_kobica
4 / 4 / 2
Регистрация: 26.10.2014
Сообщений: 114
17.02.2016, 19:48  [ТС] 8
Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
Поместите ImageItemSlider на закладку с галереей, ему присвоится значение что-то вроде imageItemSlider1 и тогда вместо:
C#
1
tabPage2.list.Add(new ImageItem { Comment = "ОАО «---»", Duration = new TimeSpan(0, 0, 0), Image = new Bitmap(new WebClient { Proxy = null }.OpenRead("http://s1.n1.by/sites/default/files/imagecache/full/news/10/03/315201/1317654038.jpg")) });
используйте:
C#
1
imageItemSlider1.Add(new ImageItem { Comment = "ОАО «---»", Duration = new TimeSpan(0, 0, 0), Image = new Bitmap(new WebClient { Proxy = null }.OpenRead("http://s1.n1.by/sites/default/files/imagecache/full/news/10/03/315201/1317654038.jpg")) });
Если я Вас правильно понял, то должно сработать.
Так не получится. Код для добавления картинок полностью состоит из ручного добавления компонентов, вот архив с гивкой, для наглядности, как это работает. И разве есть такой компонент, ImageItemSlider?
0
Вложения
Тип файла: rar ScreenCaptureProject3.rar (2.13 Мб, 2 просмотров)
Someone007
2227 / 1795 / 820
Регистрация: 09.05.2015
Сообщений: 4,426
Завершенные тесты: 1
17.02.2016, 20:04 9
Цитата Сообщение от daniel_kobica Посмотреть сообщение
И разве есть такой компонент, ImageItemSlider?
Вы же его сами создали в своем коде... А раз создали, значит есть.

Добавлено через 4 минуты
Цитата Сообщение от daniel_kobica Посмотреть сообщение
Так не получится.
Все получится...
1
daniel_kobica
4 / 4 / 2
Регистрация: 26.10.2014
Сообщений: 114
17.02.2016, 20:27  [ТС] 10
Цитата Сообщение от Someone007 Посмотреть сообщение
Вы же его сами создали в своем коде
это я знаю, что он в коде есть, я просто не понял, как его можно поместить на вкладку "Фотогалерея", где это нужно прописать или куда нажать. С утра сижу и ковыряю это место, уже не соображаю ничего, а сделать надо.
0
Someone007
2227 / 1795 / 820
Регистрация: 09.05.2015
Сообщений: 4,426
Завершенные тесты: 1
17.02.2016, 20:34 11
Цитата Сообщение от daniel_kobica Посмотреть сообщение
как его можно поместить на вкладку "Фотогалерея"
Точно так же как и любой другой контрол, с помощью дизайнера и панели Toolbox, в которой расположены доступные контролы.
1
Someone007
2227 / 1795 / 820
Регистрация: 09.05.2015
Сообщений: 4,426
Завершенные тесты: 1
17.02.2016, 20:50 12
Вот как-то так
1
Миниатюры
Как отобразить на другой вкладке tabControl картинку?  
daniel_kobica
4 / 4 / 2
Регистрация: 26.10.2014
Сообщений: 114
18.02.2016, 01:07  [ТС] 13
Вообще ничего не выходит, как ни пытаюсь, либо я что-то не то делаю, либо у меня крыша едет и не понимаю самого элементарного. Если не трудно, посмотрите пожалуйста проект, который я приложил в архиве и исправьте, а то это жесть, целый день с этой штукой провозиться и не достичь никаких результатов.
0
Вложения
Тип файла: rar Еврорегион Неман.rar (77.4 Кб, 1 просмотров)
Someone007
2227 / 1795 / 820
Регистрация: 09.05.2015
Сообщений: 4,426
Завершенные тесты: 1
18.02.2016, 04:22 14
Лучший ответ Сообщение было отмечено daniel_kobica как решение

Решение

Вроде что-то работает. Дальше сами...
1
Вложения
Тип файла: zip Еврорегион Неман.zip (26.4 Кб, 3 просмотров)
daniel_kobica
4 / 4 / 2
Регистрация: 26.10.2014
Сообщений: 114
18.02.2016, 13:51  [ТС] 15
Цитата Сообщение от Someone007 Посмотреть сообщение
Вроде что-то работает. Дальше сами...
Проект запускается, но при открытии 2-й формы ошибка
0
Миниатюры
Как отобразить на другой вкладке tabControl картинку?  
daniel_kobica
4 / 4 / 2
Регистрация: 26.10.2014
Сообщений: 114
18.02.2016, 14:41  [ТС] 16
Всё, разобрался, спасибо большое за помощь)
0
18.02.2016, 14:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2016, 14:41

Сохранение текста из RichTextBox в текущей вкладке tabControl
Всем привет!)) Вот у меня появилась проблема: У меня есть кнопка и если я на...

Получить индекс вкладки в tabControl по заголовку в этой вкладке
собственно вопрос в названии...

Связь TreeView и TabControl: отображение во вкладке информации активного узла
Всем привет! У меня проблема. Я хочу сделать так, чтобы при нажатии ветки в...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru