첨부 이미지



임의의 내용이 들어간 텍스트블럭 4개를
렌더링된 길이를 비교해서 가장 넓은애를 찾아서
보드로 알맞게 바꾸고 싶은데요.

시작후실행() 이걸 버튼으로 쓰면 잘 되거든요
(이미 Gui가 로딩이 완료된 시점에서 클릭하는거라)

근데 지금 저상태로 쓰니까 Gui가 로딩되기전에
아래 코드내용들이 다 실행되버려서
텍스트블럭 길이를 읽어오지못합니다. (0으로 다 반환함)


Gui가 완전히 로딩이 된 후 코드를 자동으로 실행하게 하는방법이 있나요?



폼을 디자이너 화면에서 더블클릭 하시면,
폼 로드 이벤트가 생성됩니다.

        private void Form1_Load(object sender, EventArgs e)
        {

        }

요런게 만들어지죠.
여기서 호출해보세요.

        private void Form1_Load(object sender, EventArgs e)
        {
시작후실행();
        }




지금 실행되는건 button1을 누를 때 마다 원이 생성됩니다. 여기서 button2와 button3 클릭으로
button2는 picturebox1 안의 원을 초기화시키는 기능을하고 button3는 초기화시켰던 기능을 해제하는
역할을 하게 하려면 어떤 문장을 써야 하나요?


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;
namespace Form1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            X_LOCATION = 10;// X열의 처음 시작하는 위치 값
        }
        public int X_LOCATION
        {
            get;
            private set;
        }
        private void button1_MouseClick(object sender, MouseEventArgs e)
        {         
            Graphics g = pictureBox1.CreateGraphics();// 픽쳐박스에 그림을 그리게 합니다.
            Pen blackpen = new Pen(Color.Black, 5);// 검은색 팬 5굵기로 그립니다.
            Rectangle rect = new Rectangle(X_LOCATION, 10, 5, 5);// 직사각형의 좌표(x,y)와 가로세로 길이를 설정
            g.DrawEllipse(blackpen, rect);// 원을그리게 하고 검은색팬과 좌표및 길이를 조정하는 값을 적용시킨다.
            g.Dispose();// 응용프로그램의 정의작업 수행
            X_LOCATION += 10 + 5;// 원 생성시 값의 크기로 간격조절
        }
        private void button2_MouseClick(object sender, MouseEventArgs e)
        {
          
        }
    }
}





button2 는 초기화 시키는것이고


button3는 초기화시켰던 기능을 해제
 = button2 가 동작하지 않도록 제어하라는건가요??
아래와 같이 해보세요.
도움되시길 바랍니다.


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
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;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private bool ActionForceJudge = false;
 
        public int X_LOCATION
        {
            get;
            private set;
        }
 
        public Form1()
        {
            InitializeComponent();
            X_LOCATION = 10;// X열의 처음 시작하는 위치 값
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Graphics g = pictureBox1.CreateGraphics();// 픽쳐박스에 그림을 그리게 합니다.
            Pen blackpen = new Pen(Color.Black, 5);// 검은색 팬 5굵기로 그립니다.
            Rectangle rect = new Rectangle(X_LOCATION, 1055);// 직사각형의 좌표(x,y)와 가로세로 길이를 설정
            g.DrawEllipse(blackpen, rect);// 원을그리게 하고 검은색팬과 좌표및 길이를 조정하는 값을 적용시킨다.
            g.Dispose();// 응용프로그램의 정의작업 수행
            X_LOCATION += 10 + 5;// 원 생성시 값의 크기로 간격조절
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            if (ActionForceJudge)
            { pictureBox1.Image = null; }
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            ActionForceJudge = true;
        }
    }
}
 
cs


소스는 전체를 첨부해둡니다.
아래를 참고하세요.


ABC=10,50, SI=DEF, IS=3J, SHR  이라는 문자열이 있습니다


여기서 제일 마지막 ", " 뒤의 문자만 가져 오고 싶어요 마지막 , 뒤의 문자의 갯수는 가변적 입니다.






            string a = "ABC=10,50, SI=DEF, IS=3J, SHR"

a 에 위의 값이 들어있다고 가정했을때,

            string[] stArrayData = a.Split(',');
            string b = stArrayData[stArrayData.Length];

이렇게 하시면 b 에서는 제일 마지막 , 콤마 뒤에 들어있는 글자들만 split 되어서 들어옵니다.


첨부 이미지

밑에 LABEL처럼 comboBox1의 인덱스 값은 OO입니다. (순서대로 나오던데 이거 설명좀요!)

comboBox1의 Text 값은 OO입니다 이거 식 알려주세용





아래와 같이 하시면 됩니다.
샘플은 아래를 참고하세요.
소스도 올려드릴게요.

첨부 이미지

첨부 이미지

첨부 이미지


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
using System;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "")
            {
                MessageBox.Show("텍스트를 입력하세요.");
            }
            else
            {
                comboBox1.Items.Add(textBox1.Text);
            }
        }
 
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            // 콤보박스의 선택된 텍스트값을 뿌려줍니다.
            lblText.Text = comboBox1.Text;
 
            // 콤보박스의 인덱스값을 뿌려줍니다.
            lblIndex.Text = comboBox1.SelectedIndex.ToString();
        }
    }
}
 



cs



소스는 아래를 참고하세요.


ComboBoxIndex.zip


질문

c# listview 질문이요!!

프로필이미지비공개
질문55건
질문마감률97.8%
질문채택률91.1%
2018.01.14. 23:13
조회수9
리스트뷰 맨앞에 row 의수를 표현하고싶습니다.
간단한 코딩부탁드립니다!




안녕하세요.
아래와같이 화면 디자인 되었다고 가정했을때 (*윈도우가 일본어입니다;;)

첨부 이미지


아래와 같이 코딩해보세요.

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
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;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            listView1.FullRowSelect = true;
            listView1.GridLines = true;
            listView1.View = View.Details;
 
            columnRow = new ColumnHeader();
            columnName = new ColumnHeader();
            columnRow.Text = "열번호";
            columnRow.Width = 60;
            columnName.Text = "내용";
            columnName.Width = 100;
 
 
            for (int i = 1; i<= 9;i++)
            {
                string[] item1 = { i.ToString(), "내용들"};
                listView1.Items.Add(new ListViewItem(item1));
            }
        }
    }
}
 
cs

위와같이 하시면

첨부 이미지

이렇게 결과가 출력됩니다.


질문

비쥬얼 스튜디오2017 질문입니다 내공80

비공개
질문13건
질문마감률66.7%
질문채택률33.3%
2018.01.09. 17:34
조회수4
첨부 이미지제가 비쥬얼 스튜디오를 해볼려고


강좌도 보면서 하고있는데


이게 처음부터 막히네요 ;; 설치 방법도 사람들이 강좌 하는대로 다 하고


소스 입력도 잘하고 디버깅 했는데


보통 hello world 이거 입력하는거부터 배운다는 가정하에


디버깅 했을때 (f5) 누르자마자 창이 꺼집니다


제가 이거 찾아봤는데 디버그 -> 프로젝트 속성 -> 링커 -> 시스템 -> 콘솔 바꾸기


이렇게 하면 된다해서 해봤는데 그럼에도 불구하고 계속 cmd 창이 꺼지네요


이거 왜이러는 걸까요 도움좀 주세요 ㅠㅠ





코딩하신 부분의 다음줄에 아래의 코드를 넣고, 다시 실행해보세요.

Console.ReadKey();

위의 코드는 키 입력값을 기다리는 구문입니다.



질문

비주얼 베이직 매우 급히 질문 있습니다. 내공100

비공개
질문14건
질문마감률90.9%
질문채택률63.6%
2018.01.09. 10:18
조회수8

2가지 문제가 있습니다.
--------------------------------------------------------
모듈 수준 정수 배열 oldArr을 정의하고 초기 값을 지정하십시오.

Dim oldArr % () = {1, 3, 4, 5, 0, 0, 6, 6, 0, 5, 4, 7, 6, 7, 0, 5}

OldArr은 폼의 Load 이벤트 중에 TextBox1에 표시됩니다.

Remove Zero 명령 단추를 클릭하면 oldArr 값이 0이 아닌 요소가 newArr 배열에 저장되고 newArr이 TextBox2에 표시됩니다.



팁 : newArr의 정확한 크기를 모르기 때문에 newArr의 크기를 정의 할 수 없습니다. oldArr을 순회하는 과정에서 0이 아닌 요소가 발견 될 때마다 newArr의 크기가 1 씩 증가하고 데이터가 기록됩니다. 여기서 newArr 인덱스 상한 또는 요소 수를 기록하기 위해 변수를 정의해야합니다. 다음 코드를 참조 할 수 있습니다.

Dim i%, newArr%()

Dim count% = -1

For i = 0 To oldArr.GetUpperBound(0)

    If oldArr(i) <> 0 Then

        count += 1

        ReDim Preserve newArr(count)

        newArr(count) = oldArr(i)

    End If

Next


번역기를 돌린건데요

쉽게 말하면 위의 oldArr = 1, 3, 4, 5, 0, 0, 6, 6, 0, 5, 4, 7, 6, 7, 0, 5 이 배열에서 Remove Zero 버튼을 누를시 textbox2에 0을 제외한 수 1, 3, 4, 5, 6, 6, 5, 4, 7, 6, 7, 5 가 나와야 합니다.

-----------------------------------------------------------------

5 행 7 열의 정수 2 차원 배열을 정의합니다. 처음 6 열은 5 명의 학생 6 과목의 시험 점수를 저장하는 데 사용되며 7 열은 각 학생 시험의 평균 점수를 저장하는 데 사용됩니다. "통계"명령 단추를 클릭하면 (1) 임의의 기능을 사용하여 5 명의 학생 (0-100 점)의 6 개의 수업을 생성하고 각 학생의 평균 점수를 계산하고 배열에 데이터를 씁니다. (2) TextBox1 텍스트 상자에 표시된 점수와 평균 점수. 아래 그림과 같은 프로그램 인터페이스.

이것도 번역기를 돌렸습니다. 아래는 디자인 입니다.


쉽게 말해서 계산 버튼을 누르면 textbox1에 5명의 6개 과목의 성적이 임의로 생성되고 각각의 학생에 평균 값이 나와야 합니다.


첨부 이미지





위와같은 질문이 있어서 샘플을 만들어보았습니다.


답변

토슈이님 답변입니다.

채택답변수258
2018.01.09. 13:44
프로필 페이지 이동
안녕하세요. 아래와같이 구현해보았습니다.
첨부 이미지

첨부 이미지

첨부 이미지


소스는 아래와 같습니다.
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
 
    Dim oldArr%() = {1345006605476705}
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
 
        Dim i%, newArr%()
        Dim count% = -1
        Dim tmp As String = String.Empty
 
        For i = 0 To oldArr.GetUpperBound(0)
            If oldArr(i) <> 0 Then
                count += 1
                ReDim Preserve newArr(count)
                newArr(count) = oldArr(i)
                tmp += oldArr(i).ToString() + ", "
            End If
        Next
 
        TextBox2.Text = Mid(tmp, 1, Len(tmp) - 2)
 
    End Sub
 
    Dim total(,) As Integer = New Integer(,) _
    {
        {2080607090300},
        {5050603080500},
        {8020307070900},
        {4080602080500},
        {3010207010900}
    }
 
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim cnt As Integer = 0
        Dim tmp As String = String.Empty
 
        For i = 0 To total.GetUpperBound(0)
            cnt = 0
            tmp = String.Empty
 
            For j = 0 To total.GetUpperBound(1- 1
                cnt += total(i, j)
                tmp += total(i, j).ToString() + "             "
            Next
            total(i, total.GetUpperBound(1)) = cnt
 
            TextBox1.Text = TextBox1.Text +
tmp.ToString()& "     " &
Int((cnt / 6).ToString()) & vbCrLf
        Next
 
    End Sub
cs

혹시나해서
소스파일 전체를 첨부합니다.
도움되시길 바랍니다.

관련소스는 아래에서 다운받아볼수 있습니다.


질문

C# 텍스트박스 커서 숨기기 실명인증 받은 성인 내공20

비공개
질문7건
질문마감률40%
질문채택률40%
2018.01.07. 23:42
조회수10

제가 텍스트 박스를 ReadOnly 용으로만 사용하려는데 텍스트박스를 클릭하면 생기는 커서가 걸리적 거리네요...

커서를 숨길 수 있는 방법 좀 알려주세요.



위와같은 질문이 있어서 가장 간단한 방법으로 비활성 제어로 답변을 드렸습니다.


textBox1.Enabled = false;


Enabled 제어를 하시면 커서가 없어지는대신 배경색이 Gray가 되긴 합니다만,

질문에 대한, 커서가 없어지는 효과를 보실수 있습니다.

질문

datagridview Row

비공개
질문77건
질문마감률97.2%
질문채택률91.6%
2018.01.08. 17:20
조회수13
첨부 이미지


1번처럼 AllowUserToAddRows 를 Ture 로 하면 그리드뷰 로우에 아무것도 쓸수가없고
2번처럼 AllowUserToAddRows 를 false 로 하면 한줄만 적었을뿐인데 아래로 한칸이 내려가서
보기가 싫어요... 2번같은 경우는 그냥 전두 다 적지않아도.. 무언가 입력이 되는동시에 바로 
한줄이 생겨서 보기가 싫어요 ㅠㅠ

질문 : 2번처럼 되고 엔터를 칠때만 Row한줄이 생기는방법은 없을까요?
아니면 더 좋은 다른방법이 있을까요? 도와주세요.




데이터그리드의 엔터키 입력시에 열을 추가하는 방법에 대한 질문이 있었습니다.

아래와같이 해보시면 제어가 가능합니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            dataGridView1.AllowUserToAddRows = false;
            dataGridView1.Rows.Add();
        }
 
        private void dataGridView1_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                dataGridView1.Rows.Add();
            }
        }
    }
}
 
cs

참고하세요.


질문

C#의 DataGridView에서 행이 추가 될 때의 이벤트와 행을 추가시키는 이벤트 내공100

비공개
질문186건
질문마감률99.3%
질문채택률88.1%
2018.01.04. 18:05
조회수15
안녕하세요. 독학 공부 중입니다.


C#의 DataGridView에서 행이 추가 될 때의 이벤트와 행을 추가시키는 이벤트를 찾고 있는데요.
아직 MSDN이 익숙하지 않아서 제가 필요한 정보를 찾는게 너무 어렵네요...


1. DataGridView에서 행이 추가 될 때 ComboBox의 아이템을 추가하는 코딩을 해야하는데,
해당 이벤트의 이름이 뭔지를 찾을 수가 없네요 ㅠㅠ.. 아래의 코드를 입력하려고 합니다.
소스코드 원문보기
  1.       DataGridViewComboBoxCell comboBoxCell = new DataGridViewComboBoxCell(); 
  2.       comboBoxCell.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox; 
  3.       comboBoxCell.Items.Add("CASH"); 
  4.       comboBoxCell.Items.Add("CARD"); 
  5.       DGV_Sales.Rows[i].Cells[2] = comboBoxCell; 

2. DataGridView를 쓸때, 어떤 셀이든 값이 입력 되면 바로 아래에 행이 추가 되는데,
이 부분을 마지막 행의 입력이 끝나면 한줄 더 생기는 이벤트로 변경하려고 하는데 방법을 모르겠네요..


도움 부탁 드립니다!!



위의 질문이 있어서 시간이 좀 있었기에 샘플을 좀 만들어봤습니다.


우선은, 그리드뷰에서 행추가 이벤트를 삭제합니다. (일본어라 죄송합니다;)

그리고 코드에서는 아래와같이 짜봤습니다.

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
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;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        DataGridViewComboBoxEditingControl dataGridViewComboBox = null;
        public Form1()
        {
            InitializeComponent();
            dataGridView1.Rows.Add();
        }
        private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
        {
            DataGridViewComboBoxCell comboBoxCell = new DataGridViewComboBoxCell();
            comboBoxCell.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox;
            comboBoxCell.Items.Add("CASH");
            comboBoxCell.Items.Add("CARD");
            dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[2= comboBoxCell;
        }
        private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            if (e.Control is DataGridViewComboBoxEditingControl &&
                ((System.Windows.Forms.DataGridViewComboBoxEditingControl)e.Control).EditingControlRowIndex ==
                    dataGridView1.Rows.Count - 1)
            {
                DataGridView dgv = (DataGridView)sender;
                this.dataGridViewComboBox = (DataGridViewComboBoxEditingControl)e.Control;
                this.dataGridViewComboBox.SelectedIndexChanged += new EventHandler(dataGridViewComboBox_SelectedIndexChanged);
            }
        }
        private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            if (this.dataGridViewComboBox != null)
            {
                this.dataGridViewComboBox.SelectedIndexChanged -= new EventHandler(dataGridViewComboBox_SelectedIndexChanged);
                this.dataGridViewComboBox = null;
            }
        }
        private void dataGridViewComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(((System.Windows.Forms.ComboBox)sender).Text))
            {
                dataGridView1.Rows.Add();
            }
        }
    }
}
 
cs


위의 소스에 대한 샘플은 아래의 첨부파일로 확인하실수 있습니다.

VS 2015 로 만들어졌습니다.

naver-0105.zip


+ Recent posts