Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

Thread Subject:
checkbox control

Subject: checkbox control

From: wahyoe Unggul

Date: 25 May, 2011 22:39:04

Message: 1 of 22

I have two checkboxes, if you delete the text in the text in the text checkbox1 on checkbox2 will also be deleted.
how do if checkbox1 "uncheck" the deleted text on checkbox1?

function checkbox1_Callback(hObject, eventdata, handles)
checkboxStatus = get(handles.checkbox1,'Value');
                if checkboxStatus==1
                    text(..............................','Color','black'); % text1
                else
                h1 = findobj(gca,'Type', 'text');
                        delete (h1); % if checkbox2 is unchecked, delete text 1
                end

function checkbox2_Callback(hObject, eventdata, handles)
checkboxStatus = get(handles.checkbox1,'Value');
                if checkboxStatus==1
                    text(..............................','Color','black'); % text2
                else
                h2 = findobj(gca,'Type', 'text');
                        delete (h2); % if checkbox2 is unchecked, delete text 2
                end

thanks
wahyoe

Subject: checkbox control

From: ImageAnalyst

Date: 26 May, 2011 00:31:47

Message: 2 of 22

wahyoe:
I have no idea what "the text in the text in the text checkbox1 on
checkbox2" means. Do you care to rephrase that?

Are you trying to say that you want two radio buttons such that if one
is selected, the text in an axes is displayed, and if the other radio
button is selected, the text in the axes is hidden?

Subject: checkbox control

From: wahyoe Unggul

Date: 26 May, 2011 00:53:04

Message: 3 of 22

ImageAnalyst <imageanalyst@mailinator.com> wrote in message <68c1ba83-4c4e-42dd-9288-03a6acdf68a9@z13g2000yqg.googlegroups.com>...
> wahyoe:
> I have no idea what "the text in the text in the text checkbox1 on
> checkbox2" means. Do you care to rephrase that?
>
> Are you trying to say that you want two radio buttons such that if one
> is selected, the text in an axes is displayed, and if the other radio
> button is selected, the text in the axes is hidden?

no, image
I mean, I have 2 checkboxes, each checkbox has a text, I've made ​​as you suggested yesterday, but I have a problem when deleting text. I want this condition
checkbox1_callback = condition "check" will make text1 and "uncheck" will remove text1
checkbox2_callback = condition "check" will make text2 and "uncheck" will remove text2
however, if the initial conditions of all checkboxes in a position to "check", if one checkbox in the "unchecked" then all text will be lost, what I want if checkbox1 in "unchecked", then only text1 are erased, so too checkbox2, if checkbox2 in "uncheck" the only deleted text2

Subject: checkbox control

From: ImageAnalyst

Date: 26 May, 2011 02:12:22

Message: 4 of 22

On May 25, 8:53 pm, "wahyoe Unggul" <wahyoe_slip...@yahoo.co.id>
wrote:
> no, image
> I mean, I have 2 checkboxes, each checkbox has a text, I've made ​​as you suggested yesterday, but I have a problem when deleting text. I want this condition
> checkbox1_callback = condition "check" will make text1 and "uncheck" will remove text1
> checkbox2_callback = condition "check" will make text2 and "uncheck" will remove text2
> however, if the initial conditions of all checkboxes in a position to "check", if one checkbox in the "unchecked" then all text will be lost, what I want if checkbox1 in "unchecked", then only text1 are erased, so too checkbox2, if checkbox2 in "uncheck" the only deleted text2

-------------------------------------------
Wow. My head is spinning. What I got out of this is that if the
checkbox is checked, it will show its text and if it's not checked, it
will have no text. I didn't understand the "however" sentence at all
- best I could get out of that is what I already said, that checking
shows text and unchecking hides text. So in the callback you would do

checkStatus = get(handles.check1, 'value');
if checkStatus
  % Show the text.
  set(handles.check1, 'String', 'Showing the text1');
else
  % Hide the text.
  set(handles.check1, 'String', []);
end

then do the same in the callback for the checkbox 2.

I have no idea what you were trying to do originally with the gca (the
current axes) and the text() and findobj() functions. They don't seem
related to your latest attempt at explanation. I really think having
someone more skilled at English rephrase this would really help a lot.

Subject: checkbox control

From: wahyoe Unggul

Date: 26 May, 2011 07:26:04

Message: 5 of 22

sorri not work, image
my starting use a single checkbox to display text, and run well.
checkboxStatus = get(handles.checkbox1,'Value');
                if checkboxStatus==1
                 text(x,y,z,num2str(A(:,1)),'FontSize',8,...
                    'HorizontalAlignment','center','Color','black');
                else
                h= set(gca,'Type', 'text')
                        delete (h);
                end

but when I create two checkbox and each checkbox has a different text, I encounter problems when deleting text.
if I uncheck one checkbos, then the entire text will be lost, what I want when I uncheck the checkbox1 then deleted only text that is in checkbox1, and so did the checkbox2, if the check is removed then the deleted text on checkbox2

unction checkbox1_Callback(hObject, eventdata, handles)
checkboxStatus = get(handles.checkbox1,'Value');
                if checkboxStatus==1
                    text(..............................','Color','black'); % text1
                else
                h1 = findobj(gca,'Type', 'text');
                        delete (h1); % if checkbox2 is unchecked, delete text 1
                end

function checkbox2_Callback(hObject, eventdata, handles)
checkboxStatus = get(handles.checkbox1,'Value');
                if checkboxStatus==1
                    text(..............................','Color','black'); % text2
                else
                h2 = findobj(gca,'Type', 'text');
                        delete (h2); % if checkbox2 is unchecked, delete text 2
                end

Subject: checkbox control

From: ImageAnalyst

Date: 26 May, 2011 10:47:51

Message: 6 of 22

You say "text that is in checkbox1" but you're using the text()
function, which puts a floating text label atop a plot or an image.
So let's get this straight. Do you want to :

1) set or clear text that is the text of the checkbox. In other
words, the text that is right to the right of the checkbox itself,

or

2) set or clear some text that is created with the text() command over
a plot or image.

Which is it?

Subject: checkbox control

From: wahyoe Unggul

Date: 26 May, 2011 13:27:05

Message: 7 of 22

ImageAnalyst <imageanalyst@mailinator.com> wrote in message <df050c79-ff08-4cb6-9a5e-33c6a6030c98@j23g2000yqc.googlegroups.com>...
> You say "text that is in checkbox1" but you're using the text()
> function, which puts a floating text label atop a plot or an image.
> So let's get this straight. Do you want to :
>
> 1) set or clear text that is the text of the checkbox. In other
> words, the text that is right to the right of the checkbox itself,
>
> or
>
> 2) set or clear some text that is created with the text() command over
> a plot or image.
>
> Which is it?

no 1
there are two checkboxes (checkbox1 and checkbox2), each checkbox has a command text (checkbox1 = text1 and checkbox2 = text2)

% checkbox1_calback
if the condition checkbox1 checked, then the text (text1) will appear on the axes, whereas if the check clear on checkbox1, then the text (text 1) will be removed from the axes

% checkbox2_calback
if the condition checkbox2 checked, then the text (text2) will appear on the axes, whereas if the check clear on checkbox2, then the text (text 2) will be removed from the axes

Subject: checkbox control

From: ImageAnalyst

Date: 26 May, 2011 13:55:20

Message: 8 of 22

We're getting closer. But you're still using ambiguous and non-
standard terminology. Now, please define "command text " since that
is not a standard term. I'm not sure why you call it a "command" as
if it's a verb commanding something to do something. Is "command
text"

1) The text associated with the "String" property of the checkbox
itself
2) Perhaps some text in an Edit Text" box than the user can edit/
change (this text is the "String" property of the "Edit text" box),
or
3) Some text in a "Static Text" label (this text is the "String"
property of the "Static text" box),?

Subject: checkbox control

From: wahyoe Unggul

Date: 26 May, 2011 14:39:04

Message: 9 of 22

ImageAnalyst <imageanalyst@mailinator.com> wrote in message <45a7a1c2-71c5-4c6a-8898-0d6391d8a23b@z13g2000yqg.googlegroups.com>...
> We're getting closer. But you're still using ambiguous and non-
> standard terminology. Now, please define "command text " since that
> is not a standard term. I'm not sure why you call it a "command" as
> if it's a verb commanding something to do something. Is "command
> text"
>
> 1) The text associated with the "String" property of the checkbox
> itself
> 2) Perhaps some text in an Edit Text" box than the user can edit/
> change (this text is the "String" property of the "Edit text" box),
> or
> 3) Some text in a "Static Text" label (this text is the "String"
> property of the "Static text" box),?

text that I mean is like this
text(x(i),y(i),int2str(i))
not "edit text box" and "static text box"

Subject: checkbox control

From: wahyoe Unggul

Date: 26 May, 2011 14:55:20

Message: 10 of 22

"wahyoe Unggul" <wahyoe_slipnot@yahoo.co.id> wrote in message <irlom8$btd$1@newscl01ah.mathworks.com>...
> ImageAnalyst <imageanalyst@mailinator.com> wrote in message <45a7a1c2-71c5-4c6a-8898-0d6391d8a23b@z13g2000yqg.googlegroups.com>...
> > We're getting closer. But you're still using ambiguous and non-
> > standard terminology. Now, please define "command text " since that
> > is not a standard term. I'm not sure why you call it a "command" as
> > if it's a verb commanding something to do something. Is "command
> > text"
> >
> > 1) The text associated with the "String" property of the checkbox
> > itself
> > 2) Perhaps some text in an Edit Text" box than the user can edit/
> > change (this text is the "String" property of the "Edit text" box),
> > or
> > 3) Some text in a "Static Text" label (this text is the "String"
> > property of the "Static text" box),?
>
text that I mean is like this
checkbox1_calback %create and delete text 1
%text 1
 text(x(i),y(i),int2str(i))

checkbox2_calback %create and delete text 2
%text 2
text(x(i)/2,y(i)/2,int2str(i))
 not "edit text box" and "static text box"

Subject: checkbox control

From: ImageAnalyst

Date: 26 May, 2011 19:47:38

Message: 11 of 22

You need to do what you did in your first post except that you need to
capture the handle of the text in a persistent variable and delete
only that one text object.

something like (untested)

persistent h1;
if get(handles.checkbox1, 'value')
    % set it
    h1 = text(...whatever...);
else
    % Clear it.
    delete(h1);
end

Then do the same for checkbox2 and h2. This way, you're not clearing
all text, just the ones that you had set. And because the h1 and h2
are persistent, it will remember them the next time it enters the
callback.
ImageAnalyst

Subject: checkbox control

From: wahyoe Unggul

Date: 27 May, 2011 00:14:04

Message: 12 of 22

ImageAnalyst <imageanalyst@mailinator.com> wrote in message <ea81c6a2-9aab-46f2-a174-405a28c7ceeb@v10g2000yqn.googlegroups.com>...
> You need to do what you did in your first post except that you need to
> capture the handle of the text in a persistent variable and delete
> only that one text object.
>
> something like (untested)
>
> persistent h1;
> if get(handles.checkbox1, 'value')
> % set it
> h1 = text(...whatever...);
> else
> % Clear it.
> delete(h1);
> end
>
> Then do the same for checkbox2 and h2. This way, you're not clearing
> all text, just the ones that you had set. And because the h1 and h2
> are persistent, it will remember them the next time it enters the
> callback.
> ImageAnalyst

checkbox1_callback(..........)
if get(handles.checkbox1, 'value')
    % set it
    h1 = text(x(i),y(i),int2str(i));
else
    % Clear it.
    delete(h1);
end


checkbox2_callback(..........)
if get(handles.checkbox1, 'value')
    % set it
    h2 = text(x(i)/2,y(i)/2,int2str(i)) ;
else
    % Clear it.
    delete(h2);
end
can only display the text, if the tick is removed (deleted text) there is an error
??? Undefined function or variable "h1".

Error in ==> main>checkbox1_Callback at 603
  delete (h1)

Subject: checkbox control

From: wahyoe Unggul

Date: 27 May, 2011 00:20:04

Message: 13 of 22

"wahyoe Unggul" <wahyoe_slipnot@yahoo.co.id> wrote in message <irmqcc$rue$1@newscl01ah.mathworks.com>...
> ImageAnalyst <imageanalyst@mailinator.com> wrote in message <ea81c6a2-9aab-46f2-a174-405a28c7ceeb@v10g2000yqn.googlegroups.com>...
> > You need to do what you did in your first post except that you need to
> > capture the handle of the text in a persistent variable and delete
> > only that one text object.
> >
> > something like (untested)
> >
> > persistent h1;
> > if get(handles.checkbox1, 'value')
> > % set it
> > h1 = text(...whatever...);
> > else
> > % Clear it.
> > delete(h1);
> > end
> >
> > Then do the same for checkbox2 and h2. This way, you're not clearing
> > all text, just the ones that you had set. And because the h1 and h2
> > are persistent, it will remember them the next time it enters the
> > callback.
> > ImageAnalyst
>

checkbox1_callback(hObject, eventdata, handles)
if get(handles.checkbox1, 'value')
    % set it
    h1 = text(x(i),y(i),int2str(i));
else
    % Clear it.
    delete(h1);
end


checkbox2_callback(hObject, eventdata, handles)
if get(handles.checkbox2, 'value')
    % set it
    h2 = text(x(i)/2,y(i)/2,int2str(i)) ;
else
    % Clear it.
    delete(h2);
end
can only display the text, if the tick is removed (deleted text ) there is an error
??? Undefined function or variable "h1".

Error in ==> main>checkbox1_Callback at 603
  delete (h1)

Subject: checkbox control

From: Nasser M. Abbasi

Date: 27 May, 2011 01:42:28

Message: 14 of 22

On 5/26/2011 5:20 PM, wahyoe Unggul wrote:

>>
>
> checkbox1_callback(hObject, eventdata, handles)
> if get(handles.checkbox1, 'value')
> % set it
> h1 = text(x(i),y(i),int2str(i));
> else
> % Clear it.
> delete(h1);
> end
>
....
> can only display the text, if the tick is removed (deleted text ) there is an error
> ??? Undefined function or variable "h1".
>
> Error in ==> main>checkbox1_Callback at 603
> delete (h1)


Look at the code.

If you hit the 'else' part above, then you are doing 'delete(h1)'

but 'h1' is not in the scope anywhere.

To reference something, it has to be there before.

--Nasser

Subject: checkbox control

From: wahyoe Unggul

Date: 27 May, 2011 02:06:04

Message: 15 of 22

"Nasser M. Abbasi" <nma@12000.org> wrote in message <irmvi7$5of$1@speranza.aioe.org>...
> On 5/26/2011 5:20 PM, wahyoe Unggul wrote:
>
> >>
> >
> > checkbox1_callback(hObject, eventdata, handles)
> > if get(handles.checkbox1, 'value')
> > % set it
> > h1 = text(x(i),y(i),int2str(i));
> > else
> > % Clear it.
> > delete(h1);
> > end
> >
> ....
> > can only display the text, if the tick is removed (deleted text ) there is an error
> > ??? Undefined function or variable "h1".
> >
> > Error in ==> main>checkbox1_Callback at 603
> > delete (h1)
>
>
> Look at the code.
>
> If you hit the 'else' part above, then you are doing 'delete(h1)'
>
> but 'h1' is not in the scope anywhere.
>
> To reference something, it has to be there before.
>
> --Nasser

hi nasser
 checkbox1_Callback(hObject, eventdata, handles)
checkboxStatus = get(handles.checkbox1,'Value');
 if checkboxStatus ==1
        text(x,y,int2str(m)); create text 1
  else
    h1 = findobj(gca,'Type', 'text');
   delete (h1); %delete text 1
    end
I have two checkboxes, each checkbox to display the text and to delete text that is displayed, if I use the code above, if I uncheck one checkbox then all text will be lost, what I want if "checkbox1_Callback (.....)" displaying text (text h1) then only "checkbox1_Callback (.....)" that can delete it (text h1)

Subject: checkbox control

From: ImageAnalyst

Date: 27 May, 2011 02:36:15

Message: 16 of 22

Come one now wahyoe Unggul, you're being very careless. Did you
totally MISS what I said about persistent variables??? Look at my
code: It says

persistent h1;

I even said "because the h1 and h2 are persistent, it will remember
them the next time it enters the callback. "

But for some reason, you didn't declare h1 and h2 as persistent. Why
not?

Depending on the initial state of the checkbox h1 might not exist if
you try to delete it before you ever set it. So in that case you'd
have to modify the delete line to look like this:

if exist('h1', 'var')
    delete(h1);
end

I think I got it right, but again, this is untested so h1 may have
quotes around it inside the delete, or maybe it's clear() instead of
delete() or some other minor change that I'm hoping you'll figure out.

If you have some kind of negative bias against using persistent
variables, then just attach the handle to the main handles structure.
Or use setappdata/getappdata. But I think persistent should be the
simplest and easiest way.

Subject: checkbox control

From: wahyoe Unggul

Date: 27 May, 2011 03:04:04

Message: 17 of 22

ImageAnalyst <imageanalyst@mailinator.com> wrote in message <dc3a0154-5cc1-4679-8e2f-1aabf51c2005@s9g2000yqm.googlegroups.com>...
> Come one now wahyoe Unggul, you're being very careless. Did you
> totally MISS what I said about persistent variables??? Look at my
> code: It says
>
> persistent h1;
>
> I even said "because the h1 and h2 are persistent, it will remember
> them the next time it enters the callback. "
>
> But for some reason, you didn't declare h1 and h2 as persistent. Why
> not?
>
> Depending on the initial state of the checkbox h1 might not exist if
> you try to delete it before you ever set it. So in that case you'd
> have to modify the delete line to look like this:
>
> if exist('h1', 'var')
> delete(h1);
> end
>
> I think I got it right, but again, this is untested so h1 may have
> quotes around it inside the delete, or maybe it's clear() instead of
> delete() or some other minor change that I'm hoping you'll figure out.
>
> If you have some kind of negative bias against using persistent
> variables, then just attach the handle to the main handles structure.
> Or use setappdata/getappdata. But I think persistent should be the
> simplest and easiest way.

hi, image
sorry,I am still confused
Can you give me an example when used in the checkbox
there is a checkbox in a text that is displayed when the "check" and text will be deleted / cleaned when the checkbox in the "unchecked"
checkbox1_(hObject, eventdata, handles)
x=get(handles.xbutton,'UserData')
y=get(handles.ybutton,'UserData')
m=get(handles.ybutton,'UserData')
 %if check, display text
text(x,y,int2str(m)); % text = h1
 %if uncheck, delete text h1
delete(h1)

Subject: checkbox control

From: Ilham Hardy

Date: 27 May, 2011 11:22:02

Message: 18 of 22

"wahyoe Unggul" <wahyoe_slipnot@yahoo.co.id> wrote in message <irn4b4$mai$1@newscl01ah.mathworks.com>...
> ImageAnalyst <imageanalyst@mailinator.com> wrote in message <dc3a0154-5cc1-4679-8e2f-1aabf51c2005@s9g2000yqm.googlegroups.com>...
> > Come one now wahyoe Unggul, you're being very careless. Did you
> > totally MISS what I said about persistent variables??? Look at my
> > code: It says
> >
> > persistent h1;
> >
> > I even said "because the h1 and h2 are persistent, it will remember
> > them the next time it enters the callback. "
> >
> > But for some reason, you didn't declare h1 and h2 as persistent. Why
> > not?
> >
> > Depending on the initial state of the checkbox h1 might not exist if
> > you try to delete it before you ever set it. So in that case you'd
> > have to modify the delete line to look like this:
> >
> > if exist('h1', 'var')
> > delete(h1);
> > end
> >
> > I think I got it right, but again, this is untested so h1 may have
> > quotes around it inside the delete, or maybe it's clear() instead of
> > delete() or some other minor change that I'm hoping you'll figure out.
> >
> > If you have some kind of negative bias against using persistent
> > variables, then just attach the handle to the main handles structure.
> > Or use setappdata/getappdata. But I think persistent should be the
> > simplest and easiest way.
>
> hi, image
> sorry,I am still confused
> Can you give me an example when used in the checkbox
> there is a checkbox in a text that is displayed when the "check" and text will be deleted / cleaned when the checkbox in the "unchecked"
> checkbox1_(hObject, eventdata, handles)
> x=get(handles.xbutton,'UserData')
> y=get(handles.ybutton,'UserData')
> m=get(handles.ybutton,'UserData')
> %if check, display text
> text(x,y,int2str(m)); % text = h1
> %if uncheck, delete text h1
> delete(h1)

Perhaps you need to define the h1 "outside" the "if loop",


HTH.

Subject: checkbox control

From: wahyoe Unggul

Date: 27 May, 2011 12:25:20

Message: 19 of 22

 > Perhaps you need to define the h1 "outside" the "if loop",
> HTH.

sorry, I do not understand
Can you give an example

Subject: checkbox control

From: ImageAnalyst

Date: 27 May, 2011 13:43:36

Message: 20 of 22

On May 27, 8:25 am, "wahyoe Unggul" <wahyoe_slip...@yahoo.co.id>
wrote:
> sorry, I do not understand
> Can you give an example
-----------------------------------------------------------------------------------------
I DID give you an example, and you chose not to use it (tell me why).
Here it is again. This time I actually tried it out myself and it
works. I made a GUI in GUIDE with two checkboxes, with tags named
checkbox1 and checkbox2. Then I put an axes on it and plotted on it
with this line
plot(1:10);
in the opening code. Here are the callbacks for the checkboxes.
Note: they use "persistent" like I told you to use (but you're not
wanting to for some reason). You can click on the checkboxes and they
show or hide their respective text labels which are displayed in the
overlay of the "axes" over the plot.

% --- Executes on button press in checkbox1.
function checkbox1_Callback(hObject, eventdata, handles)
% hObject handle to checkbox1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of checkbox1
persistent h1;
try
if get(handles.checkbox1, 'value')
% set it
h1 = text(1,2,'text controlled by checkbox 1');
else
% Clear it.
if exist('h1', 'var')
delete(h1);
end
end
catch ME
message = sprintf('Error in checkbox1_Callback():\n%s', ME.message);
uiwait(msgbox(message));
end

% --- Executes on button press in checkbox2.
function checkbox2_Callback(hObject, eventdata, handles)
% hObject handle to checkbox2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of checkbox2
persistent h2;
try
if get(handles.checkbox2, 'value')
% set it
h2 = text(1,5,'text controlled by checkbox 2');
else
% Clear it.
if exist('h2', 'var')
delete(h2);
end
end
catch ME
message = sprintf('Error in checkbox2_Callback():\n%s', ME.message);
uiwait(msgbox(message));
end

Subject: checkbox control

From: wahyoe Unggul

Date: 27 May, 2011 14:25:21

Message: 21 of 22

 
image,thank you very much for your help
there are errors in the "catch"
Illegal use of reserved keyword "catch".
but not a problem, one more question me, how to declare the text (h2) in the form of loop

% --- Executes on button press in checkbox2.
 function checkbox2_Callback(hObject, eventdata, handles)
 % hObject handle to checkbox2 (see GCBO)
 % eventdata reserved - to be defined in a future version of MATLAB
 % handles structure with handles and user data (see GUIDATA)
 % Hint: get(hObject,'Value') returns toggle state of checkbox2
 persistent h2;
 try
  if get(handles.checkbox2, 'value')
  % set it
                for i =1:10
  h2 = text(x(i),y(i),int2str(i)) %teks h2
                end
  else
  % Clear it.
  if exist('h2', 'var')
  delete(h2);
  end
  end

Subject: checkbox control

From: wahyoe Unggul

Date: 27 May, 2011 14:40:04

Message: 22 of 22


 % --- Executes on button press in checkbox2.
  function checkbox2_Callback(hObject, eventdata, handles)
  % hObject handle to checkbox2 (see GCBO)
  % eventdata reserved - to be defined in a future version of MATLAB
  % handles structure with handles and user data (see GUIDATA)
  % Hint: get(hObject,'Value') returns toggle state of checkbox2
  persistent h2;
   if get(handles.checkbox2, 'value')
   % set it
                 for i =1:10
   h2 (i)= text(x(i),y(i),int2str(i)) %teks h2
                 end
   else
   % Clear it.
   if exist('h2', 'var')
  delete(h2);
  end
  end
image
thanks very much
semuanya sudah berjalan dengan baik tanpa "catch"

Tags for this Thread

What are tags?

A tag is like a keyword or category label associated with each thread. Tags make it easier for you to find threads of interest.

Anyone can tag a thread. Tags are public and visible to everyone.

Contact us